Хобрук: Ваш путь к мастерству в программировании

Связь между корнем композиции и композитором

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

В книге их определения таковы:

Корень композиции – это единое логическое место в приложении, в котором модули составляются вместе.

Композитор — это объединяющий термин для обозначения любого объекта или метода, который составляет Зависимости. Это важная часть корня композиции. Компоновщик часто является контейнером внедрения зависимостей, но это также может быть любой метод, создающий графы объектов вручную (используя Pure DI).

Composition Root больше похож на название места/локации, где мы должны создать график нашего приложения, а Composer — это то, что на самом деле делает это? Или это что-то другое?

Если вы используете DI-контейнер, Корень композиции должен быть единственным местом, где вы используете DI-контейнер.

Что еще вы могли бы иметь в Composition Root? Разве это не только контейнер DI?

public class CompositionRoot
{        
    public static IContainer Compose()
    {
        var builder = new ContainerBuilder();

        builder.RegisterType<Calculator>().As<ICalculator>().SingleInstance();


        return builder.Build();
    }
}

С Уважением


Ответы:


1

Корень композиции можно рассматривать как архитектурный модуль или даже слой. Он может иметь всю инфраструктуру, необходимую для связывания приложения, которая не принадлежит ни одному из нижних уровней (например, уровням представления, домена или доступа к данным). Подумайте о коде, который:

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

Там, где Composition Root может иметь весь этот инфраструктурный код, Composer будет состоять только из кода, который обновляет все эти фрагменты кода, обеспечивает кэширование в соответствии с их стилем жизни и строит графы объектов из этих созданных компонентов.

01.03.2020
  • Можно сказать, что Composition Root — это модуль (простыми словами имя файла в приведенном выше примере — CompositionRoot.cs), в котором мы должны создать график приложения (также здесь мы можем загрузить некоторую конфигурацию файла), а Composer — это то, что нужно. которые фактически строят график приложения (метод Compose() в приведенном выше примере)? 01.03.2020
  • Модуль – это группа связанных классов. Слой состоит из одного или нескольких модулей, а модуль состоит из одного или нескольких классов. Таким образом, неверно предполагать, что корнем композиции является один класс или файл. 02.03.2020
  • Метод Compose в вашем примере не является компоновщиком. В вашем случае метод Compose является частью корня композиции, который создает композитор. В вашем примере IContainer (построенный ContainerBuilder) является Composer. 02.03.2020
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..