在干净的架构封装 struct 中,Service(或BroadcastReceiver等)属于哪里?我想知道在域和数据层之间...我将创建一个名为services in domain Package的新包.是这样吗,还是我应该换一种方式做?

推荐答案

当你想到clean architecture的时候,你应该想到Android Service,就像在任何其他Android应用程序组件上一样,比如Activity.

ServiceActivity都可以做类似的事情,比如播放音乐、执行网络请求等,其中一个区别是在Service的情况下缺乏用户界面(尽管人们可以将Notification视为Service的UI).这种没有用户界面的情况一开始可能会产生误导.

考虑到这些应用程序组件的类似用途,我们可以想象ServiceActivity可以位于CLEAN体系 struct 项目的同一层.

首先,我不会 Select data层,因为它是存放数据源(domain层中定义的抽象的具体实现)的地方,比如Web API或数据库控制器.有人会争辩说,Service在某种程度上是应用程序的数据源,因为您可以绑定到它并获得数据from the background,但如果您查看ActivitiesFragments,您会注意到,通过使用Intent或参数,它们也可以是其他Activities的数据源.

我不会 Select domain包-它应该包含definitions个应用程序的业务逻辑-存储库的接口等.此外,这一层应该是platform-independent,所以不应该有Android组件.AService绝对不属于那里.

左边是app(或presentation)层.它是Android-specific层--这是Service层的地方.Service可以直接与邻居domain层通信以经由其可以传递到边界Activity、显示具有数据的Notification等的用例来访问数据.所有这一切都没有违反干净的架构规则.

Android相关问答推荐

如何使用喷气背包压缩让Animated Image Vector每次动画化一条路径?

在Android Studio Iguana上运行示例代码时,Gradle Build错误

在卡片上创建圆角底部边框

从单元测试访问RES/RAW文件

从未设置实时数据值

AndroidX Media3 迁移指南

Android 不在后台更新位置

我可以从 Android 中的选定文本中获取周围的文本吗?

在 Android Studio 中获取更新版本的 Picasso 库的错误警告消息

围绕动态大小的内容包装 Jetpack Compose Row?

Android 设备断开连接后发送的 BLE 蓝牙数据

如何在 Android 应用程序未激活/未聚焦时显示视图?

如何关闭可组合对话框?

Hilt 依赖注入重复绑定错误

如何在 MAUI 项目中包含每个平台的现有 C++ 库?

从expose 的 dropdownMenu 可组合、jetpack 组合中 Select 选项时,不会触发文本字段的 onValueChange

我应该使用 Bluetooth Classic 还是 Bluetooth LE 与我的移动应用程序通信?

如何在 Jetpack compose 中将 Canvas 中的文本居中?

如何将房间数据库导出到 .CSV

Android Studio:如何添加应用程序质量洞察窗口以查看 Android Studio 中的 Crashlytics 数据?