README.md

Clear Architecture в проекте на C#

В соответствии с архитектурой Clear Architecture приложение разделено на слои. Каждому слою определен свой провайдер. Архитектура приложения реализует следующую цепочку событий:

Источник (view или модель) -> запрос (Request) -> провайдер(объединение провайдеров) -> исполнитель запросов провайдера -> сообщение с результатом -> мессаджер -> получатель результата (модель или иной объект)

Для провайдера Observable(слушаемых) объектов цепочка событий представляет собой:

событие (OnChange Observable объекта ) -> провайдер Observable объектов -> Observable объект -> мессаджер сообщений -> получатель сообщений (модель или иной объект)

Все объекты делятся на генераторы сервиса и пользователей(потребителей) сервисов. Выделены следующие единицы:

  • Provider - объект, который предоставляет сервис любым пользователям(объектам) без их учета
  • объекты-подписчики - потребители сервисов(ProviderSubscriber), которые регистрируются в объединениях для получения/предоставления сервиса
  • малые объединения подписчиков(SmallUnion) - объект группы подписчиков(ProviderSubscriber) для получения/предоставления сервиса
  • объединения подписчиков(Union) - объект группы подписчиков(ProviderSubscriber) для получения/предоставления расширенной функциональности
  • пул(Pool) - группа объектов, определяемой пользователем емкости. Заданное количество объектов можно получить и обратно освободить.

Регистрацию подписчиков и их объединений, а также специалистов, отмену регистрации осуществляет сервис локатор (Service Locator).

Все объекты учитываемые сервис локатором реализуют интерфейсы INamed, IValidated, ICommented и ISubscriber.

Provider - объект, предоставляющий какую-либо функциональность любым объектам. Объединение(SmallUnion или Union) подписчиков (классов, реализующие интерфейс IProviderSubscriber) учитывает объекты подписчики только одного типа. Интерфейс IProviderSubscriber является наследником интерфейса ISubscriber.

По времени жизни провайдеры делятся на:

  • постоянные. Время жизни - время жизни приложения. Не могут быть выгружены.
  • нормальные. Могут быть загружены и выгружены.
  • короткоживущие. Самовыгружающиеся специалисты по какому-либо признаку(например по бездействию или отсутствию подписчиков). По умолчанию.

Пример малого объединения подписчиков - малое объединение(SmallUnion) моделей. Объединения, в отличие от малых объединений, поддерживают функцию выбора текущего подписчика.

Как было указано, управлением провайдеров и объединений занимается администратор (Service Locator), реализующий интерфейс IServiceLocator.

Регистрация провайдеров(объединений) проводиться по его имени.

Привязка и отвязка подписчиков (классов с интерфейсом IProviderSubscriber) к провайдерам осуществляется ServiceLocator или самим провайдером. Если провайдер не загружен производится автоматическая создание необходимых провайдеров (объединений). Отписка подписчиков сервис локатором проводится сразу от всех подписанных им провайдеров.

В данном проекте реализованы следующие провайдеры:

  • LogProvider - предоставляет услуги по протоколированию работы приложения
  • ApplicationProvider - провайдер приложения
  • ModelUnion - объединение моделей
  • ObservableUnion - объединение Observable объектов
  • MessengerUnion - объединение для доставки сообщений объектам
  • ExecutorProvider - провайдер выполнения запросов подписчиков
Конвейеры
0 успешных
0 с ошибкой