Я хочу применить Чистая архитектура дяди Боба . Это ограничивает ядро приложения - сущности и бизнес-логику - независимостью от внешнего мира, особенно от выбора конкретной среды.
Я понимаю, по крайней мере, теоретически, как разделить каркасы пользовательского интерфейса, администраторов баз данных и т. Д. Однако я хочу использовать Rx в качестве своего асинхронного решения и мне интересно, смогу ли я его также разделить.
Предположим, что я пишу кеш аутентификации на стороне клиента, и он отвечает за предоставление сертификата входа в систему, если таковой имеется в кеше, и при необходимости извлекает его с сервера. Тогда мне нужен интерфейс IServer
(только интерфейс, конкретная реализация будет проблемой "внешнего уровня"):
interface IServer {
getCertificate(phone: string, password: string): Observable
}
Могу ли я каким-то образом изменить эту зависимость от Observable
?
Обходной путь, который я сейчас могу придумать, заключается в использовании простого старого стиля обратного вызова
interface IServer {
getCertificate(phone: string, password: string, callback: () => Void)
}
Это единственный способ?
Или
Должен ли я сначала отделить Rx от моей логики?
Вторая мысль: существует ли какой-либо абстрактный интерфейс интерфейса / протокола для включения в мой проект? (p.s. Я использую машинопись)
Тогда возникает проблема: моя бизнес-логика зависит от абстрактного определения интерфейса ReactiveX, и я могу пойти с этим. Я могу рассматривать это как фундаментальный выбор, который я должен сделать на ранней стадии, например, выбор языка программирования.