android - 整洁架构中的服务

标签 android kotlin clean-architecture

Service(或BroadcastReceiver 等)在整洁的架构包结构中属于哪里?我想知道域和数据层之间...我会在 domain 包中创建名为 services 的新包。是这样吗,还是我应该换一种方式?

最佳答案

在考虑整洁的架构时,您应该想到 Android Service与任何其他 Android 应用程序组件(如 Activity)类似例如。

ServiceActivity两者都可以做类似的事情,如播放音乐、执行网络请求等,一个区别是在 Service 的情况下缺少用户界面。 (尽管可以将 Notification 视为 Service 的 UI)。起初,缺少 UI 可能会产生误导。

考虑到这些应用程序组件的相似用途,我们可以想象 ServiceActivity可以位于clean architecture项目的同一层。

首先我不会选择 data层,因为它是您的数据源(在 domain 层中定义的抽象的具体实现)的地方,例如 Web API 或数据库 Controller 。有人会争辩说 Service在某种程度上是应用程序的数据源,因为您可以绑定(bind)到它并从后台获取数据,但是如果您查看ActivitiesFragments您会注意到它们也可以是其他 Activities 的数据源通过使用 Intent s 或参数。

我不会选择 domain包 - 它应该包含应用程序业务逻辑的定义 - 存储库的接口(interface)等。此外,这一层应该是平台无关的,所以没有Android组件应该在那里。 Service绝对不属于那里。

app (或 presentation )层被留下。这是一个 Android 特定的 层 - 这是 Service 的地方. Service可以直接与邻居沟通domain层通过可以传递给绑定(bind)的用例访问数据 Activity , 显示 Notification与数据或其他任何东西。所有这一切都没有违反整洁的架构规则。

关于android - 整洁架构中的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74068503/

相关文章:

安卓 ANR SurfaceView

android - 类型 'State<List<User>?>' 没有方法 'getValue(Nothing?, KProperty<*>)',因此它不能用作委托(delegate)

android - 整洁架构 : Use different model classes for different data sources?

Flutter BLoC - Bloc vs Cubit 事件驱动状态管理优势

design-patterns - 整洁架构中的实体应该知道持久性机制吗?

android - 在 android 中显示大型预渲染动画的首选方法是什么?

java - View 的 getWidth() 和 getHeight() 返回 0

android - 从 Android 应用程序调用 C++ DLL

android - RecyclerView 项目动画,onAnimationFinished 被调用,但没有 onAnimationStarted。为什么?

reflection - Kotlin - 是否有一种聪明的方法可以为类的所有方法抛出 NotImplementedError?