Передчасне впровадження складності шляхом впровадження моделей дизайну до того, як вони знадобляться, не є хорошою практикою.
Але якщо ви будете дотримуватися всіх (або навіть більшості) принципів SOLID та використовувати загальні шаблони дизайну, ви внесете певну складність, оскільки функції та вимоги додаються чи змінюються, щоб ваш дизайн був таким, як необхідний та гнучкий.
Однак як тільки ця складність буде введена і працює як чемпіон, коли ти її зняв?
Приклад. У мене заявка написана для клієнта. Первісно створені там, де декілька способів давати підвищення заробітчанам. Я використовував схему стратегії та фабрику, щоб підтримувати весь процес красивим та чистим. З часом певні методи підвищення, коли власник програми додає або видаляє.
Минає час, і новий власник бере на себе. Цей новий власник з твердим носом, все просто і має лише один спосіб підняти.
Складність, необхідна для структури стратегії, більше не потрібна. Якби я куди це кодував із тих вимог, якими вони є зараз, я б не вніс цієї додаткової складності (але переконайтесь, що я міг би ввести це з малою чи відсутністю роботи, якщо виникне потреба).
Тож чи я зараз знімаю реалізацію стратегії? Я не думаю, що цей новий власник ніколи не змінить способи отримання підвищення. Але сама програма продемонструвала, що це може статися.
Звичайно, це лише один приклад програми, коли новий власник бере на себе і спростив багато процесів. Я міг би видалити десятки класів, інтерфейсів і фабрик і зробити всю програму набагато простішою. Зауважте, що поточна реалізація працює чудово, і власник задоволений цим (і здивований і ще щасливіший, що мені вдалося так швидко здійснити її зміни через обговорювану складність).
Я визнаю, що невелика частина цього сумніву полягає в тому, що велика ймовірність, що новий власник більше не збирається використовувати мене. Мені дуже не байдуже, що хтось інший візьме це на себе, оскільки він не був великим генератором доходу.
Але я дбаю про 2 (пов'язані) речі
Мене трохи хвилює, що новому обслуговуючому апарату доведеться думати трохи складніше, намагаючись зрозуміти код. Складність - це складність, і я не хочу гнівати психоманіяка, що йде за мною.
Але ще більше я переживаю за те, щоб конкурент бачив цю складність і думав, що я просто впроваджую дизайнерські зразки, щоб прокласти свої години на робочих місцях. Потім поширюю цю чутку, щоб нашкодити іншому моєму бізнесу. (Я чув це згадане.)
Так...
Взагалі, чи слід раніше знімати необхідну складність, хоча вона працює і історично продемонстрована потреба в складності, але ви не маєте жодних ознак, що вона буде потрібна в майбутньому?
Навіть якщо на вищезазначене питання, як правило, відповідає "ні", чи розумно зняти цю "непотрібну" складність, якщо передавати проект конкурентові (або незнайомцю)?