Разработка веб-API и уровня приложений для микрослужб
Совет
Это содержимое является фрагментом из электронной книги, архитектуры микрослужб .NET для контейнерных приложений .NET, доступных в документации .NET или в виде бесплатного скачиваемого PDF-файла, который можно читать в автономном режиме.
Принципы SOLID и внедрение зависимостей
Принципы SOLID являются важными методами, применяемыми в любом современном и критически важном приложении, например при разработке микрослужб при помощи шаблонов проблемно-ориентированного проектирования (DDD). SOLID — акроним пяти фундаментальных принципов:
Принцип единственной обязанности
Принцип открытия-закрытия
Принцип подстановки Барбары Лисков
Принцип разделения интерфейса
Принцип инверсии зависимостей
Принципы SOLID в большей степени касаются способа разработки приложения или внутренних слоев микрослужб, а также разделения зависимостей между ними. Они относятся не к домену, а к техническому проектированию приложения. Последний принцип, принцип инверсии зависимостей (DI), позволяет отделить слой инфраструктуры от остальных слоев, что обеспечивает лучшую несвязанную реализацию слоев DDD.
Внедрение зависимостей — это один из способов реализации принципа инверсии зависимостей. Это методика для обеспечения слабой связи между объектами и их зависимостями. Вместо того, чтобы напрямую создавать экземпляры участников совместной работы или использовать статические ссылки (например, использовать new…), классу предоставляются (или "внедряются" в него) объекты, необходимые ему для выполнения действий. Чаще всего классы объявляют зависимости через свой конструктор, позволяя им следовать принципу явных зависимостей. Внедрение зависимостей обычно основано на особых контейнерах с инверсией управления (IoC). ASP.NET Core предоставляет простой встроенный контейнер IoC, но можно также использовать любой другой контейнер IoC, такой как Autofac или Ninject.
Соблюдение принципов SOLID поможет сделать ваши классы небольшими, хорошо организованными и удобными в тестировании. Но как вы узнаете о том, что в ваши классы внедрено слишком много зависимостей? При использовании DI через конструктор это будет легко определить, посмотрев на количество параметров конструктора. Большое количество зависимостей обычно указывает (запахло проблемой) на то, что класс пытается сделать слишком многое и, вероятно, нарушает принцип единственной обязанности.
Для подробного рассмотрения принципов SOLID необходимо отдельное руководство. Поэтому в этом руководстве требуется наличие только минимальных знаний по этой теме.
Дополнительные ресурсы
SOLID: фундаментальные принципы ООП
https://deviq.com/solid/Контейнеры с инверсией управления и шаблон внедрения зависимостей
https://martinfowler.com/articles/injection.htmlСтив Смит (Steve Smith). Ключевое слово new
https://ardalis.com/new-is-glue