У меня тут уже не в первый раз, ситуация с горем от ума. Просматривал код одной своей программистки, и весь прослезился. предупреждение - дальше немного технических абракадабр
Если вкратце: у нее там ситуация, когда надо сделать обработку неких событий. Между обработками, на концептуальном уровне, есть некая условная связь, но по сути они сильно разные. Главное, что их объединяет - они доставляют результат в едином формате и в единую очередь.
Теперь о том, что вызвало слезы. Вот уже не первый раз вижу, как мешает излишек прочитанных книг плюс вера в то, что эти знания надо непременно применить. Моя орлица сделала из этого совершенно тривиального таска некого концептуально-правильного монстра. 24 класса, 2 фабрики, 3 примененных поведенческих паттерна и туча юнит тестов. Кроме того, похоже и Фулер ей впрок не пошел, т.к. там заметны следы совершенно нечеловеческого рефакторинга. Ну против юнит тестов я ничего не имею против, но видели-бы вы что она там проверяет :( Короче, с ее т.з. решение универсальное и красивое. Вот если завтра еще сюда надо будет добавить 2 десятка событий, то все будет просто. Ну она так думает.
Проблема, как понятно всяком, кто не настолько фанатично концептуален, что это ужас и кошмар. Не будет в этой задаче никогда еще 20 событий, и я сильно сомневаюсь что будет 2. Вот одно могу представить, это да. Но не больше. Вспомнить потом ей, а другому понять это, будет задачей не для слабонервных. В каком месте (и главное зачем) там надо задавать 2 разных стратегии, и на кой черт она туда прикрутила бридж? Зачем в полностью своей подсистеме ей нужен декоратор? И на какие подозрения, наводит фасад, без которого тут не обошлось? (справедливости ради, при такой концептуальности без фасада было бы еще хуже)
Я честно с этим всем разбирался 2 часа. Потом написал 3 класса (можно было и 2), строчек по 40 в каждом. И да, оно не будет обрабатывать все на свете когда оно нам вдруг понадобится. Да (о ужас) у меня там есть swtich с целыми 4мя кейсами. Да, для того чтоб добавить новое событие прийдется редактировать 2 класса. Но ведь у нас нет цели улучшить мир решив одним махом все его задачи. Наша цель - решить задачу, вот эту самую, конкретную. При этом держа в голове будущее сопровождение решения человеками с круглыми головами.
P.S. Я переписал это все не от того, что очень хотелось, но для хорошего примера ей на воспитание. Беседы, проведенные ранее, помогали приглушить этот дефект мышления на время, но вот все вернулось. Теперь будет живой и неприятный случай воспитания. Из моего опыта - один из самых неприятных и позорных для неглупого специалиста. А она неглупая, она в порядке. Просто книг перечитала ;)