Spędziłem dużo czasu na czytaniu różnych książek o „dobrym projektowaniu”, „wzorach projektowych” itp. Jestem wielkim fanem podejścia SOLID i za każdym razem, gdy muszę napisać prosty kawałek kodu, myślę o przyszłość. Tak więc, jeśli implementacja nowej funkcji lub poprawki błędu wymaga jedynie dodania trzech wierszy kodu:
if(xxx) {
doSomething();
}
To nie znaczy, że zrobię to w ten sposób. Jeśli wydaje mi się, że ten fragment kodu prawdopodobnie powiększy się w najbliższej przyszłości, pomyślę o dodaniu abstrakcji, przeniesieniu tej funkcji gdzie indziej i tak dalej. Celem, do którego dążę, jest utrzymanie średniej złożoności na tym samym poziomie, co przed moimi zmianami.
Uważam, że z punktu widzenia kodu jest to całkiem dobry pomysł - mój kod nigdy nie jest wystarczająco długi i dość łatwo jest zrozumieć znaczenie różnych jednostek, takich jak klasy, metody i relacje między klasami a obiektami.
Problem polega na tym, że zajmuje to zbyt wiele czasu i często wydaje mi się, że byłoby lepiej, gdybym po prostu wdrożył tę funkcję „tak jak jest”. Chodzi o „trzy wiersze kodu” vs. „nowy interfejs + dwie klasy do wdrożenia tego interfejsu”.
Z punktu widzenia produktu (kiedy mówimy o wyniku ) rzeczy, które robię, są zupełnie bezsensowne. Wiem, że jeśli będziemy pracować nad kolejną wersją, dobry kod jest naprawdę świetny. Ale z drugiej strony czas poświęcony na „dobry” kod mógł zostać wykorzystany na wdrożenie kilku przydatnych funkcji.
Często czuję się bardzo niezadowolony z moich wyników - dobry kod, który potrafi tylko A, jest gorszy niż zły kod, który potrafi A, B, C i D.
Czy takie podejście może przynieść dodatni zysk netto dla projektu oprogramowania, czy może to strata czasu?