Использование простое в обоих случаях, но что означает включение ввода параметров в Parser1 по сравнению с другим?
Это фундаментальное изменение дизайна. И дизайн должен передавать намерение и смысл. Вам нужно иметь отдельные объекты для каждой строки, которую вы хотите проанализировать? Другими словами, зачем нам нужен экземпляр синтаксического анализатора со строкой X и другой экземпляр со строкой Y? Что такое синтаксический анализ (ing) и заданная строка, что оба должны жить и умирать вместе? Предполагая, что «базовая [синтаксический анализ] реализация» (как говорит Роберт Харви) не меняется, похоже, в этом нет никакого смысла. И даже тогда его сомнительное ИМХО.
Как меняется концепция класса при передаче данных в конструктор вместо параметров метода?
Параметры конструктора говорят мне, что эти вещи необходимы для объекта. Правильное состояние не гарантируется без них. Также я знаю, как / почему один парсер принципиально отличается от другого.
Параметры конструктора не дают мне знать слишком много о том, как использовать класс. Если вместо этого я должен установить определенные свойства - откуда мне это знать? Целая банка червей открывается. Какие свойства? В каком порядке? Прежде чем использовать какие методы? и так далее.
Другой вопрос возникает, когда я понимаю, что интерфейс был бы совершенно бессмысленным во второй реализации:
Интерфейс, как и в API, - это методы и свойства, предоставляемые клиентскому коду. Не зацикливайтесь public interface { ... }
исключительно. Таким образом, значение интерфейса заключается в дилемме параметра «либо», либо «конструктор против метода», а не public interface Iparser
противpublic sealed class Parser
sealed
Класс нечетный. Если я думаю о различных реализациях парсера - вы упомянули «Iparser» - тогда наследование - моя первая мысль. Это просто естественное концептуальное расширение моего мышления. То есть все ParserX
s в основном Parser
s. Как еще это сказать? ... Немецкая Шепард - это собака (наследство), но я могу научить своего попугая лаять (вести себя как собака - "интерфейс"); но Полли не собака, просто притворяется, выучив подмножество упрямства Классы, абстрактные или иные, прекрасно работают как интерфейсы .