214 похожих чатов

Я так понимаю запускать foreground-сервис в юзкейсе - плохая идея,

учитывая, что слой домена не должен иметь в качестве зависимостей компоненты Android? В моем случае сервис находится в отдельном модуле от активности, и этот модуль не может иметь в качестве зависимости модуль с активити (во избежании циклических зависимостей). Запускать мне его хотелось бы по команде пользователя. Я, думаю, передавать в качестве параметра этому юзкейсу класс активности (то есть экземпляры Class<*> или KClass<*>) и стартовать сервис через метод интерфейса (назовём его Контролёром), реализация которого прописана в слое представления того же модуля, где находится этот сервис. То есть примерно та же идея, что и с репозиторием: сделать интерфейс в слое домена, а реализацию вынести в другой слой. Насколько хороший подход с точки зрения чистой архитектуры?

2 ответов

13 просмотров

В контексте чистой архитектуры и разделения ответственностей между слоями, запуск foreground-сервиса из слоя домена действительно может быть не самой лучшей практикой. Слой домена следует оставить независимым от конкретных фреймворков или компонентов Android. Ваше предложение использовать интерфейс в слое домена для запуска сервиса, а реализацию этого интерфейса поместить в слой представления, кажется более соответствующим принципам чистой архитектуры. Это позволит изолировать слой домена от зависимостей от Android и и сохранить его независимость. Вы можете создать интерфейс в слое домена, определяющий методы для запуска и управления сервисом. Затем, в слое представления, реализуйте этот интерфейс с использованием компонентов Android, таких как активность или контроллер. Это обеспечит связь между слоями, при этом сохраняя слой домена свободным от Android-зависимостей. Примерно так выглядит структура: Слой домена: kotlin Copy code interface ServiceController { fun startService() fun stopService() // Другие методы для управления сервисом } Слой представления (Android): kotlin Copy code class ServiceControllerImpl : ServiceController { override fun startService() { // Код для запуска сервиса в контексте Android } override fun stopService() { // Код для остановки сервиса в контексте Android } // Другие методы для управления сервисом } Такой подход позволяет соблюдать принципы чистой архитектуры, такие как изоляция слоя домена от фреймворков и обеспечение более гибкой и легко тестируемой системы. Однако, важно отметить, что каждый случай имеет свои особенности, и вам следует принимать во внимание конкретные требования и контекст вашего проекта при принятии решений о структуре и организации кода.

Да не как будто. А это гтпшный ответ

Похожие вопросы

Обсуждают сегодня

Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Всем привет. Поделитесь, пожалуйста, опытом. Есть форма, на которой имеется dbgrid и кнопки: добавить, редактировать, удалить. Если нет записей в dbgrid, то кнопки редактирова...
Евгений
5
type TExtensions<GExtender>=class function GetExtension<GEntityExtenderType>:GEntityExtenderType; end; function TExtensions<GExtender>.GetExtension<GEntityExtenderType...
zamtmn
8
Всем привет. Подскажите, почему не меняется значение поля при переключении сайта?
Alexander Peterikov
11
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Всем привет, препод задал вопрос, подскажите пожалуйста, какой адрес инкапсулирует указатель?
Свинка Пеппа
8
Почему никто ещё не написал квантовую виртуальную машину на Windows?
КТ315
7
Карта сайта