Узоры сложные
Все шаблоны проектирования следует использовать с осторожностью. На мой взгляд, вам следует провести рефакторинг в сторону шаблонов, когда для этого есть веская причина, вместо того, чтобы сразу реализовывать шаблон. Общая проблема с использованием шаблонов состоит в том, что они добавляют сложности. Чрезмерное использование шаблонов затрудняет дальнейшую разработку и сопровождение данного приложения или системы.
В большинстве случаев есть простое решение, и вам не нужно применять какой-либо конкретный шаблон. Хорошее эмпирическое правило - использовать шаблон всякий раз, когда есть тенденция к замене фрагментов кода или необходимость их частого изменения, и будьте готовы принять на себя предостережение сложного кода при использовании шаблона.
Помните, что вашей целью должна быть простота и используйте шаблон, если вы видите практическую потребность в поддержке изменений в вашем коде.
Принципы важнее шаблонов
Использование шаблонов может показаться спорным, если они явно могут привести к чрезмерно продуманным и сложным решениям. Однако программисту гораздо интереснее ознакомиться с методами и принципами проектирования, которые лежат в основе большинства шаблонов. Фактически, одна из моих любимых книг о «шаблонах проектирования» подчеркивает это , повторяя, какие принципы применимы к рассматриваемому шаблону. С точки зрения релевантности они достаточно просты, чтобы быть полезными, чем шаблоны. Некоторые из принципов являются достаточно общими, чтобы охватывать нечто большее, чем объектно-ориентированное программирование (ООП), например, принцип подстановки Лискова , если вы можете создавать модули своего кода.
Существует множество принципов проектирования, но те, что описаны в первой главе книги GoF , весьма полезны для начала.
- Программируйте «интерфейс», а не «реализацию». (Банда четырех 1995: 18)
- Отдавайте предпочтение «композиции объекта» над «наследованием класса». (Банда четырех 1995: 20)
Позвольте им на время погрузиться в вас. Следует отметить, что, когда был написан GoF, интерфейс означал все, что является абстракцией (что также означает суперклассы), не путать с интерфейсом как типом в Java или C #. Второй принцип исходит из наблюдаемого чрезмерного использования наследования, которое, к сожалению, все еще распространено сегодня .
Оттуда вы можете прочитать о принципах SOLID, о которых рассказал Роберт Сесил Мартин (он же дядя Боб) . Скотт Хансельман взял интервью у дяди Боба в подкасте об этих принципах :
- S Ingle Ответственность Принцип
- Принцип замкнутости O pen
- L Иськов принцип замещения
- Я nterface сегрегация Принцип
- D ependency Принцип инверсии
Эти принципы - хорошее начало для чтения и обсуждения с коллегами. Вы можете обнаружить, что эти принципы переплетаются друг с другом и с другими процессами, такими как разделение задач и внедрение зависимостей . После некоторого времени выполнения TDD вы также можете обнаружить, что эти принципы естественным образом применяются на практике, поскольку вам необходимо в некоторой степени следовать им, чтобы создавать изолированные и повторяемые модульные тесты.