Usage is simple in both cases, but what does it mean to enable parameter input to Parser1, compared to the other?
È un cambiamento di progettazione fondamentale. E il design dovrebbe trasmettere intento e significato. Hai bisogno di avere oggetti separati per ogni stringa che vuoi analizzare? In altre parole, perché abbiamo bisogno di un'istanza di parser con stringX e un'altra istanza con stringY? Di cosa si tratta parse (ing) e della stringa data che i due devono vivere e morire insieme? Partendo dal presupposto che "l'implementazione [di parsing] sottostante" (come dice Robert Harvey) non cambia, sembra non esserci motivo. E anche allora il suo dubbio IMHO.
How does the concept of a class change when passing data to the constructor instead of method parameters?
I parametri del costruttore mi dicono che queste cose sono necessarie per un oggetto. Lo stato corretto non è garantito senza di loro. Inoltre, so come / perché un parser è fondamentalmente diverso da un altro.
I parametri del costruttore mi impediscono di sapere troppo su come utilizzare la classe. Se invece dovrei impostare certe proprietà - come faccio a saperlo? Si apre un intero barattolo di vermi. Quali proprietà? In che ordine? Prima di usare quali metodi? e così via.
Another question comes up when I realize that an interface would be quite meaningless in the second implementation:
Un'interfaccia, come in A.P.I., sono i metodi e le proprietà esposti al codice client. Non lasciarti impacchettare solo in public interface { ... }
. Quindi il significato dell'interfaccia si trova nel dilemma dei parametri del costruttore o del metodo vs, NON public interface Iparser
vs public sealed class Parser
La classe sealed
è dispari. Se sto pensando a diverse implementazioni del parser - hai menzionato "Iparser" - allora l'ereditarietà è il mio primo pensiero. È solo un'estensione concettuale naturale nel mio modo di pensare. OSSIA tutto ParserX
s è fondamentalmente Parser
s. Come altro dirlo? ... Un pastore tedesco è un cane (eredità), ma posso addestrare il mio pappagallo ad abbaiare (comportarsi come un cane - "interfaccia"); ma Polly non è un cane, semplicemente fa finta, avendo imparato un sottoinsieme di dogness. Le classi, astratte o meno, funzionano perfettamente come interfacce .