|
|||
Dependency InjectionЧасто наши объекты используют другие объекты в своей работе. Если не обращать внимание на какие-либо паттерны, мы просто создаем какой-либо объект в том классе, где в нем есть необходимость. Dependency Injection ( Внедрение зависимости ) – это шаблон проектирования, который позволяет создавать слабосвязанный код. Например, struct FilesWorker { FilesWorker(std:: unique_ptr< IFileOutputter> fileOutputter) { this-> fileOutputter = std:: move(fileOutputter); }
void write(std:: string_view path, std:: string_view text) { fileOutputter-> writeMessage(path, text); } private: std:: unique_ptr< IFileOutputter> fileOutputter;
};
Преимущества: · Помогает в модульном тестировании · Количество шаблонного кода сокращается, поскольку инициализация зависимостей выполняется компонентом инжектора; · Расширение приложения становится еще проще; · Помогает уменьшить связность кода, что важно при разработке приложений. Недостатки: · Это несколько сложновато для изучения, а чрезмерное использование может привести к проблемам управления или другим проблемам. · Многие возможные ошибки из процесса компиляции перемещаются в процесс выполнения программы. · Внедрения зависимостей во фреймворках реализовано с помощью рефлексии или динамического программирования. Это может помешать использованию автоматизации разработки с помощью IDE, например, будет сложно воспользоваться функциями «найти ссылки», «показать иерархию вызовов» и будет сложно заниматься безопасно рефакторингом.
|
|||
|