Шаблоны для реализации принципов SOLID - PullRequest
6 голосов
/ 05 января 2009

Я делаю презентацию принципов разработки SOLID и пытаюсь соединить принцип единой ответственности и принцип Open-Closed с шаблонами проектирования.

В настоящее время у меня есть

  • SRP: прокси, фасад
  • OCP: стратегия, команда

Есть ли какие-либо другие базовые шаблоны, которые я должен включить?

Ответы [ 2 ]

21 голосов
/ 05 января 2009

Принципы SOLID - это больше атрибуты хорошего языка и структуры OO, чем что-либо еще. Они не легко переводятся в шаблоны дизайна. Скорее, они влияют на хорошее и плохое в шаблоне проектирования.

Как правило, все принципов SOLID появляются где-то в каждом шаблоне проектирования. Если все принципы SOLID не отображаются, у вас есть способ улучшить шаблон проектирования.

Одиночная ответственность - это действительно инкапсуляция плюс некоторые аспекты наследования и полиморфизма. Одиночная ответственность - это скорее основной принцип или принцип того, как разложить проблему на взаимодействующие объекты и определить классы этих объектов. Все шаблоны дизайна должны иллюстрировать это.

Аналогично, Open / Closed - это языковая функция, обычно реализуемая через наследование. Но это можно сделать с помощью обезьяньего патча. Все шаблоны дизайна должны иллюстрировать это.

Лисковская подстановка также обычно является языковой особенностью. Мы часто реализуем это с помощью хорошо продуманных полиморфных классов. Некоторые люди утверждают, что типирование утки нарушает этот принцип, другие говорят, что типирование утки это проявляет. Существует множество шаблонов проектирования, основанных на замене Лискова. Все, что имеет полиморфизм, будет демонстрировать замещение Лискова.

Разделение интерфейса может быть языковой функцией. У Java это есть. Python - по большинству учетных записей - не делает этого. Однако вы заметите, что многие проекты Python пытаются формализовать свои определения интерфейсов с помощью суперклассов и модульных тестов.

Инверсия зависимости (зависит от абстракций) часто является особенностью языка. Не многие модели дизайна настаивают на этом. Однако многим из нас нравится использовать абстракции в библиотеке коллекций Java, чтобы мы могли использовать подстановку Лискова среди конкретных классов.

0 голосов
/ 05 января 2009

Я сделал ту же презентацию и выбрал несколько шаблонов дизайна, чтобы показать, как они применяют принципы.

Я заметил, что для LSP все, кроме двух шаблонов проектирования из GOF, использовали замещение.

...