Cześć, mam luźne pytanie natury stricte filozoficznej dotyczące open-closed principle.
Tak się składa, że stworzyłem dziś pierwszy interface w projekcie (na potrzeby zwiększenia testowalności kodu operującego czasem) przy czym serwisów zawierających jakąś tam logikę jest ponad 10 (architektura warstwowa).
Czy Waszym zdaniem tworzenie **zawczasu **interfejsów (zakładając, że na chwilę obecną jest małe prawdopodobieństwo by miały pojawić się w przyszłości nowe implementacje) i ich wykorzystanie w roli typów jest **nadmiarowe **(mimo, że sprowadza się to do: formalnego zdefiniowania interfejsu, uzupełnienia implementacji o implements xyz oraz zmiany typów zależności w klasach które je wykorzystują)?
Patrzę na to nieco filozoficznie, że *a nuż kiedyś się to przyda *(chociaż kłóci się to z YAGNI), to bezpieczny refactoring który zająłby pewnie max godzinę, "popraw teraz bo jak odłożysz na później to nie poprawisz nigdy".
Zdaję sobie sprawę, że nadgorliwość jest gorsza od faszyzmu oraz, że wszelkiego rodzaju zasady to drogowskaz a nie coś czego zawsze i wszędzie należy się sztywno trzymać i ciekaw jestem jak wygląda Wasz złoty środek.
Czytałem wypowiedź wyżej, od @elwis i z jednej strony się zagadzam, z drugiej nie.
Czy warto pisać kod na przyszłość - nie ma sensownego sposobu żeby na to odopowiedzieć - pytanie jest zbyt ogólne.
- Czy warto stworzyć klasę, której mogę użyć później ale nie używam teraz?
- Czy warto Tworzyć abstrakcję w miejscach, A, B, C?
- Czy warto podzielić tą klasę na mniejsze kawałki, gdybym miał ich kiedyś użyć? Czy może jest inny powód żeby je podzieć?
Heck, a co z testami? Przecież testy to jest kod, który się pisze na przyszłość.
Tak na prawdę, caly ten temat sprowadza się do tego, że jeśli masz mało doświadczenia, to jesteś trochę jak grzesznik który spotyka proroka. Nie potrafisz rozróżnić dobra od zła (legacy code'u od dobrego designu), więc popełniasz błędy. Fajnie, że próbujesz się edukować, i pytasz - jak pisać software - ale zadałeś zbyt ogólne pytanie. Jak pytasz na forum "Czy stosować Open/Close, i kiedy?" to tak jakbyś pytał proroka "Jak być dobrym człowiekiem?" albo "Dokąd zmierzamy?". There's no way to answer that question.
Jeśli faktycznie chcesz się nauczyć, to pokaż nam aplikację nad którą pracujesz, i powiedz jakie masz obawy dokładnie. Zadaj pytanie na podstawie przykładu, może wtedy dostaniesz odpowiedź która faktycznie Ci pomoże.