Użycie jest proste w obu przypadkach, ale co to znaczy włączyć wprowadzanie parametrów do Parser1, w porównaniu do drugiego?
Jest to fundamentalna zmiana projektu. A projekt powinien przekazywać intencje i znaczenie. Czy potrzebujesz osobnych obiektów dla każdego łańcucha, który chcesz przeanalizować? Innymi słowy, dlaczego potrzebujemy wystąpienia parsera z stringX i innego wystąpienia z stringY? Co takiego jest w analizie składni i danym łańcuchu, że oboje muszą żyć i umrzeć razem? Zakładając, że „podstawowa implementacja [parsowania]” (jak mówi Robert Harvey) nie zmienia się, wydaje się, że nie ma sensu. I nawet wtedy jego wątpliwe IMHO.
Jak zmienia się koncepcja klasy podczas przekazywania danych do konstruktora zamiast parametrów metody?
Parametry konstruktora mówią mi, że te rzeczy są wymagane dla obiektu. Bez nich nie można zagwarantować właściwego stanu. Wiem także, dlaczego / dlaczego jeden parser zasadniczo różni się od drugiego.
Parametry konstruktora uniemożliwiają mi zbyt dużą wiedzę na temat korzystania z klasy. Jeśli zamiast tego mam ustawić określone właściwości - skąd mam to wiedzieć? Otwiera się cała puszka robaków. Jakie właściwości W jakiej kolejności? Przed użyciem jakich metod? i tak dalej.
Pojawia się kolejne pytanie, kiedy zdaję sobie sprawę, że interfejs byłby zupełnie bez znaczenia w drugiej implementacji:
Interfejs, podobnie jak w API, to metody i właściwości narażone na kod klienta. Nie daj się owinąć public interface { ... }
wyłącznie. Zatem znaczenie interfejsu wynika z dylematu parametru konstruktor vs konstruktor vs metoda, NIE public interface Iparser
vspublic sealed class Parser
sealed
Klasa jest nieparzysta. Jeśli myślę o różnych implementacjach parsera - wspomniałeś o „Iparserze” - to moją pierwszą myślą jest dziedziczenie. To tylko naturalne przedłużenie mojego myślenia. IE wszystkie ParserX
są zasadniczo Parser
s. Jak inaczej to powiedzieć? ... Owczarek niemiecki jest psem (dziedziczenie), ale mogę wyszkolić papugę do szczekania (zachowywać się jak pies - „interfejs”); ale Polly nie jest psem, udaje tylko, że nauczył się podzbioru psości. Klasy, abstrakcyjne lub inne, doskonale służą jako interfejsy .