L'utilizzo è semplice in entrambi i casi, ma cosa significa abilitare l'input di parametri in Parser1, rispetto all'altro?
È un cambiamento di progettazione fondamentale. E il design dovrebbe trasmettere intento e significato. Devi 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? Cosa c'è nell'analisi (ing) e nella stringa data che i due devono vivere e morire insieme? Supponendo che l '"implementazione [analisi] sottostante" (come dice Robert Harvey) non cambi, non sembra avere senso. E anche allora il suo discutibile IMHO.
Come cambia il concetto di una classe quando si passano i dati al costruttore invece dei parametri del metodo?
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 dall'altro.
I parametri del costruttore mi impediscono di sapere troppo su come usare la classe. Se invece dovrei impostare determinate proprietà, come faccio a saperlo? Si apre un'intera lattina di vermi. Quali proprietà? In quale ordine? Prima di usare quali metodi? e così via.
Un'altra domanda sorge quando mi rendo conto che un'interfaccia sarebbe piuttosto insignificante nella seconda implementazione:
Un'interfaccia, come nell'API, è i metodi e le proprietà esposti al codice client. Non lasciarti avvolgere public interface { ... }
esclusivamente. Quindi il significato dell'interfaccia è nel dilemma dei parametri metodo o costruttore o metodo, NON public interface Iparser
vspublic sealed class Parser
La sealed
classe è strana. Se sto pensando a diverse implementazioni di parser - hai menzionato "Iparser" - allora l'ereditarietà è il mio primo pensiero. È solo una naturale estensione concettuale nel mio pensiero. IE tutti gli ParserX
s sono fondamentalmente Parser
s. In che altro modo 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, finge semplicemente di aver imparato un sottoinsieme di dogness. Le classi, astratte o meno, servono perfettamente come interfacce .