курсы 7e87c53d18 first | 3 years ago | |
---|---|---|
app | 3 years ago | |
gradle | 3 years ago | |
README.md | 3 years ago | |
build.gradle | 3 years ago | |
gradle.properties | 3 years ago | |
gradlew | 3 years ago | |
gradlew.bat | 3 years ago | |
monkey.cmd | 3 years ago | |
settings.gradle | 3 years ago |
Пример реализации Service Locator в Clean Architecture на языке Kotlin
Архитектура реализует следующие цепочки событий:
источники(view <-> презентер, прочие объекты) -> запрос -> исполнитель (провайдер DB/NET/пр.) -> сообщение с результатом -> мессенджер <-> получатели сообщений(презентеры, прочие объекты)
объекты(запросы) -> изменение Observable объектов(Broadcast, Content Provider, прочих) -> оповещение подписчиков Observable объектов
Т.к. начиная с провайдера и заканчивая месенджером объекты не зависят от жизненного цикла View, то на этом участке возможно использование потоковой обработки событий(реактивного программирования)
Жизненный цикл презентора совпадает с циклом жизни View, к которой он связан. Взаимодействие между ними осуществляется через единственный метод интерфеса IActionHandler:
В основе архитектуры лежит модель общественного разделения труда и парадигма функционального программирования. Все объекты делятся на генераторы сервиса и пользователей(потребителей) сервисов. Выделены следующие единицы:
Регистрацию подписчиков и их объединений, а также провайдеров и их взаимное связывание, отмену регистрации осуществляет сервис локатор (IServiceLocator). Все объекты учитываемые сервис локатором реализуют интерфейс ISubscriber, включающий в себя интерфейсы IValidated и INamed. Интерфейс INamed, содержит метод:
Интерфейс IValidated определяет следующий метод:
провайдер(IProvider) - объект, предоставляющий какую-либо функциональность другим объектам.
Состав интерфейса IProvider (наследника INamed и IValidated):
провайдеры делятся на постоянные(isPersistent), выгружаемые и короткоживущие. Короткоживущий провайдеры самостоятельно выгружаются из памяти при отсутствии активности потребителей своего сервиса.
Объединение(ISmallUnion или IUnion) подписчиков (классов, реализующие интерфейс IProviderSubscriber) учитывает подписчиков только одного типа. Интерфейс IProviderSubscriber, является наследником интерфейсов INamed и IValidated и имеет методы:
Интерфейс ISmallUnion является наследником интерфейса Provider и имеет методы:
Наследником интерфейса ISmallUnion является IUnion. Состав методов:
Как было указано, управлением провайдеров и объединений занимается администратор, реализующий интерфейс IServiceLocator:
В составе данной реализации описаны следующие провайдеры/объединения: