You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

整洁架构包结构中Service/BroadcastReceiver应归属哪层?domain层建services包可行吗?

整洁架构中Android组件(Service/BroadcastReceiver)的分层归属

首先明确:Service、BroadcastReceiver这类Android系统组件不属于领域层或数据层,它们应该归属于表现层(Presentation Layer)或框架适配层(Framework Adapter Layer)。

为什么不能放在领域层?

  • 领域层是整洁架构的核心,只包含纯业务规则、实体、用例,不依赖任何外部框架(包括Android SDK)。如果把Android特有的组件放进domain包,会直接让领域层和Android框架耦合,违反了整洁架构“内层不依赖外层”的核心原则,导致领域层无法脱离Android环境复用,也大幅增加测试难度。
  • 你打算在domain下建services包的做法是不合适的,这会污染领域层的纯度,破坏分层的独立性。

为什么不能放在数据层?

  • 数据层的职责是处理数据的获取、存储和转换(比如网络请求、数据库操作),核心是数据逻辑,而非系统组件的生命周期管理或系统事件响应。Service/BroadcastReceiver的核心作用是和Android系统交互(比如后台任务调度、接收系统广播),和数据层的职责完全不匹配。

正确的分层方式

  • 建议在项目根目录下单独创建presentation(表现层)或framework(框架适配层)包,在其中再细分services、broadcasts子包,专门存放这些Android系统组件。
  • 这些组件仅作为“入口”或“适配器”:比如后台Service需要执行业务逻辑时,应该通过依赖注入调用领域层的用例(Use Case),业务逻辑完全由领域层负责,Service只处理启动、生命周期回调等系统相关逻辑。

举个简单的包结构示例:

├── domain/
│   ├── entities/
│   ├── usecases/
│   └── repositories/
├── data/
│   ├── repositories/
│   └── datasources/
├── presentation/
│   ├── activities/
│   ├── fragments/
│   ├── services/
│   │   └── SyncDataService.kt
│   └── broadcasts/
│       └── NetworkChangeReceiver.kt
└── framework/
    └── ...(其他系统适配代码)

内容的提问来源于stack exchange,提问作者RitchyCZE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:31:03