El uso es simple en ambos casos, pero ¿qué significa habilitar la entrada de parámetros en Parser1, en comparación con el otro?
Es un cambio de diseño fundamental. Y el diseño debe transmitir intención y significado. ¿Necesita tener objetos separados para cada cadena que desea analizar? En otras palabras, ¿por qué necesitamos una instancia de analizador con stringX y otra instancia con stringY? ¿Qué hay en parse (ing) y la cadena dada que los dos deben vivir y morir juntos? Suponiendo que la "implementación subyacente [análisis]" (como dice Robert Harvey) no cambia, parece que no tiene sentido. E incluso entonces es cuestionable en mi humilde opinión.
¿Cómo cambia el concepto de una clase al pasar datos al constructor en lugar de los parámetros del método?
Los parámetros del constructor me dicen que estas cosas son necesarias para un objeto. El estado adecuado no está garantizado sin ellos. Además, sé cómo / por qué un analizador es fundamentalmente diferente de otro.
Los parámetros del constructor evitan que tenga que saber demasiado sobre cómo usar la clase. Si en cambio se supone que debo establecer ciertas propiedades, ¿cómo lo sé? Se abre una lata entera de gusanos. Que propiedades ¿En qué orden? Antes de usar qué métodos? y así.
Otra pregunta surge cuando me doy cuenta de que una interfaz no tendría sentido en la segunda implementación:
Una interfaz, como en API, son los métodos y propiedades expuestos al código del cliente. No te dejes envolver public interface { ... }
exclusivamente. Entonces, el significado de la interfaz está en el dilema del parámetro o método del constructor o del método, NO public interface Iparser
vspublic sealed class Parser
La sealed
clase es rara. Si estoy pensando en diferentes implementaciones de analizador, usted mencionó "Iparser", entonces la herencia es mi primer pensamiento. Es solo una extensión conceptual natural en mi pensamiento. IE todos los ParserX
s son fundamentalmente Parser
s. ¿De qué otra manera decirlo? ... Un Shepard alemán es un perro (herencia), pero puedo entrenar a mi loro a ladrar (actuar como un perro - "interfaz"); Pero Polly no es un perro, simplemente finge, después de haber aprendido un subconjunto de la ternura. Las clases, abstractas o de otro tipo, sirven perfectamente como interfaces .