Byłem już w iluś projektach, ale w większości były stosunkowo niewielkie. Staraliśmy się, żeby kod był czysty i czytelny - pisaliśmy "dla siebie".
Ostatnio trafiłem do takiego "korpo-projektu" zrobionego przez jakichś szaleńców, którzy naczytali się 10000 książek o wzorcach projektowych, i oczywiście nie po to, żeby teraz nie wciskać tych wszystkich wzorców wszędzie, niezależnie czy ma to jakikolwiek sens czy nie. Nie można zrobić
int sum = 2 + 3;
tylko trzeba
Integer a = IntegerBuilder
.fromPrimitiveInt(2)
.withSign('+')
.build();
Integer b = IntegerBuilder
.fromPrimitiveInt(3)
.withSign('+')
.build();
Integer sum = OperationResultFactory
.createResult()
.withOperationType(operationUtils.getOperation('addition'))
.withNumbers(ArrayOfNumbersHandler.getNumbersFromNumberListWrapper(ArrayOfNumbersHandler.createArrayOfNumbersFromIntegers(a, b)
.doWhateverOtherUnnecessaryBsICouldThinkOf();
??
To jest jakieś kompletne szaleństwo. Nawciskane warstw abstrakcji, które nie rozwiązują żadnych problemów, tylko tworzą nowe. Chcesz zobaczyć, co się dzieje, np. jak wstawisz nowy rekord typu User do bazy? Nie wystarczy, że zerkniesz do UserTriggerHandler. Musisz iść do jakiejś bzdurnej TriggerHandlerFactory, która wywołuje jakieś inne bzdurne klasy, które wywołują inne bzdurne klasy, które wywołują inne bzdurne klasy, i dopiero po przebiciu się przez 5 warstw bzdurnych, niepotrzebnych abstrakcji dochodzisz do czegoś, co w poprzednich projektach było zwyczajnie UserTriggerHandlerem. Każda z tych klas "rozwiązuje" problem, który na 99% nigdy nie powstanie, za to tworzy kilka nowych, już teraz, kiedy ja potrzebuję naprawić jakiegoś buga w tej istniejącej logice.
Szczerze mówiąc to ten kod z tymi całymi "enterprise patternami" jest równie nieczytelny, jak hinduso-kod pisany przez ludzi, którzy znali tylko i wyłącznie struktury "if" i "for", i zagnieżdżali je 25 razy, żeby osiągnąć pożądany rezultat, tyle że ten hinduso-kod można było śmiało przerabiać po kawałku na coś bardziej sensownego i było to mile widziane, a tutaj oczywiście jest system zaprojektowany przez doświadczonych architektów, znających wszystkie wzorce projektowe i w ogóle, i tego betonu już nikt nie ruszy, do końca świata.
Ja wiem, że "kto nigdy nie strzelił do komara z armaty, niech pierwszy rzuci kamieniem", ale dla niektórych programistów, a zwłaszcza architektów, to jest po prostu styl życia. Dlaczego oni muszą to robić?! I dlaczego ja potem muszę to nieczytelne spaghetti napisane zgodnie ze wszystkimi SOLIDami i innymi śmiesznymi skrótami z ewidentnym pominięciem tego najważniejszego (KISS) utrzymywać?!
Nienawidzę tej roboty.
Rant over.