Przedwczesne wprowadzanie złożoności poprzez wdrażanie wzorców projektowych przed ich użyciem nie jest dobrą praktyką.
Ale jeśli zastosujesz się do wszystkich (lub nawet większości) zasad SOLID i zastosujesz wspólne wzorce projektowe, wprowadzisz trochę złożoności w miarę dodawania lub zmieniania funkcji i wymagań, aby zachować łatwość konserwacji i elastyczność w razie potrzeby.
Jednak kiedy ta złożoność zostanie wprowadzona i działa jak mistrz, kiedy ją usuniesz?
Przykład. Mam aplikację napisaną dla klienta. Pierwotnie stworzony tam, gdzie istnieje kilka sposobów na podwyżki dla pracowników. Użyłem wzorca strategii i fabryki, aby cały proces był ładny i czysty. Z biegiem czasu niektóre metody podnoszenia zostały dodane lub usunięte przez właściciela aplikacji.
Czas płynie, a nowy właściciel przejmuje kontrolę. Ten nowy właściciel ma twardy nos, wszystko jest proste i ma tylko jeden sposób na podbicie.
Złożoność wymagana przez wzorzec strategii nie jest już potrzebna. Gdybym wiedział, gdzie to kodować z obecnych wymagań, nie wprowadziłbym tej dodatkowej złożoności (ale upewnij się, że mógłbym wprowadzić ją przy niewielkiej lub żadnej pracy, jeśli zajdzie taka potrzeba).
Czy mogę teraz usunąć wdrożenie strategii? Nie sądzę, aby ten nowy właściciel kiedykolwiek zmienił sposób przyznawania podwyżek. Ale sama aplikacja wykazała, że może się to zdarzyć.
Oczywiście jest to tylko jeden przykład w aplikacji, w której nowy właściciel przejmuje i upraszcza wiele procesów. Mogłem usunąć dziesiątki klas, interfejsów i fabryk i uprościć całą aplikację. Zauważ, że obecna implementacja działa dobrze, a właściciel jest z niej zadowolony (i zdziwiony, a nawet bardziej szczęśliwy, że mogłem tak szybko wprowadzić jej zmiany z powodu omawianej złożoności).
Przyznaję, że niewielka część tych wątpliwości wynika z tego, że jest wysoce prawdopodobne, że nowy właściciel już mnie nie wykorzysta. Nie obchodzi mnie to, że ktoś to przejmie, ponieważ nie był to duży generator dochodów.
Ale dbam o 2 (powiązane) rzeczy
Obchodzi mnie trochę, że nowy opiekun będzie musiał przemyśleć nieco trudniej, próbując zrozumieć kod. Złożoność jest złożonością i nie chcę rozgniewać psycho-maniaka, który mnie ściga.
Ale jeszcze bardziej martwię się o to, że konkurencja widzi tę złożoność i myślę, że po prostu wdrażam wzorce projektowe, aby wypełnić moje godziny pracy. Następnie rozpowszechniam tę pogłoskę, aby zaszkodzić mojej drugiej firmie. (Słyszałem o tym.)
Więc...
Ogólnie rzecz biorąc, czy wcześniej potrzebna złożoność powinna zostać usunięta, nawet jeśli działa, a historycznie wykazano potrzebę złożoności, ale nie masz żadnych wskazówek, że będzie ona potrzebna w przyszłości?
Nawet jeśli odpowiedź na powyższe pytanie brzmi „nie”, czy mądrze jest usunąć tę „niepotrzebną” złożoność, przekazując projekt konkurentowi (lub nieznajomemu)?