Преждевременное введение сложности путем реализации шаблонов проектирования до того, как они необходимы, не является хорошей практикой.
Но если вы будете следовать всем (или даже большинству) принципам SOLID и использовать общие шаблоны проектирования, вы внесете некоторую сложность, так как функции и требования будут добавлены или изменены, чтобы сохранить ваш дизайн как обслуживаемый и гибкий по мере необходимости.
Однако, когда эта сложность введена и работает как чемпион, когда вы ее убрали?
Пример. У меня есть заявление, написанное для клиента. При первоначальном создании там, где несколько способов повышения ставок для сотрудников. Я использовал шаблон стратегии и фабрику, чтобы весь процесс был красивым и чистым. Со временем определенные методы повышения были добавлены или удалены владельцем приложения.
Время идет, и новый владелец вступает во владение. Этот новый владелец тверд, у него все просто и у него есть только один способ поднять ставку.
Сложность, необходимая для паттерна стратегии, больше не нужна. Если бы я где-то кодировал это из требований, как они есть сейчас, я бы не стал вводить эту дополнительную сложность (но позаботился бы о том, чтобы я мог представить ее практически без каких-либо усилий в случае необходимости).
Так я должен удалить реализацию стратегии сейчас? Я не думаю, что этот новый владелец когда-либо изменит способ повышения. Но само приложение продемонстрировало, что это может произойти.
Конечно, это только один пример в приложении, где новый владелец вступает во владение и упрощает многие процессы. Я мог бы удалить десятки классов, интерфейсов и фабрик и сделать все приложение намного проще. Обратите внимание, что текущая реализация работает просто отлично, и владелец доволен этим (и удивлен и даже счастлив, что я смог осуществить ее изменения так быстро из-за обсуждаемой сложности).
Я признаю, что небольшая часть этого сомнения заключается в том, что, скорее всего, новый владелец больше не будет меня использовать. Мне действительно все равно, что кто-то другой возьмет это на себя, поскольку это не было генератором большого дохода.
Но я забочусь о 2 (связанных) вещах
Я немного беспокоюсь о том, что новый сопровождающий должен будет подумать немного усерднее, пытаясь понять код. Сложность - это сложность, и я не хочу злить психоманьяка, преследующего меня.
Но еще больше я беспокоюсь о том, что конкурент видит эту сложность и думает, что я просто внедряю шаблоны проектирования, чтобы затрачивать время на работу. Затем распространять этот слух, чтобы навредить другим моим делам. (Я слышал это упомянутое.)
Так...
В общем, следует ли удалять ранее необходимую сложность, даже если она работает, и исторически существовала необходимость в сложности, но у вас нет никаких признаков того, что она понадобится в будущем?
Даже если на вышеприведенный вопрос обычно отвечают «нет», имеет ли смысл убрать эту «ненужную» сложность, если передать проект конкуренту (или незнакомцу)?