干净的架构:哪一层是一个非常常见的模块?
Clean architecture: which layer for a very common module?
我有一个非常常用的模块,用于向 multi-platform/service 报告事件,它看起来像
class EventReportRepository @Inject constructor(
private val logServiceADataSource,
private val logServiceBDataSource
) {
suspend fun sendEvent(evt: String, args: Map<String,String>)
}
很多层都可能调用这个模块,比如DataSource、Repository、Domain、ViewMode、Presenter。
我的问题是,这个模块的最佳位置在哪里?如何为其他层引用它?
如果从多个层调用一个模块,将它放在单独的“core”文件夹中是有意义的
|--> lib/
|--> core/
| |--> utility/
| | |--> common_module_a/
| | |--> common_module_b/
| | |...
| |--> ...
|--> features/
| |--> feature_a/
| | |--> data_source/
| | |--> repository/
| | |--> domain/
| | |--> view_mode/
| | |--> presenter/
| |--> feature_b/
| | |...
注意:我见过有人用上面的方式组织特征,而且层文件夹是顶级文件夹,包含每个层的特征子文件夹:
|...
|--> layers/
|--> data_source/
| |--> feature_a/
| |--> feature_b/
|--> repository/
| |--> feature_a/
| |--> feature_b/
|--> ...
无论如何,与 features/layers 文件夹不同,我认为没有关于如何组织核心文件夹的硬性规定。这真的是视情况而定。它可能包含:
- 在整个层中使用的模块(如您的示例)
- 强制清洁架构的合同(抽象 repository/datasoruce 类 等)
这是这样一个组织的example。
我有一个非常常用的模块,用于向 multi-platform/service 报告事件,它看起来像
class EventReportRepository @Inject constructor(
private val logServiceADataSource,
private val logServiceBDataSource
) {
suspend fun sendEvent(evt: String, args: Map<String,String>)
}
很多层都可能调用这个模块,比如DataSource、Repository、Domain、ViewMode、Presenter。
我的问题是,这个模块的最佳位置在哪里?如何为其他层引用它?
如果从多个层调用一个模块,将它放在单独的“core”文件夹中是有意义的
|--> lib/
|--> core/
| |--> utility/
| | |--> common_module_a/
| | |--> common_module_b/
| | |...
| |--> ...
|--> features/
| |--> feature_a/
| | |--> data_source/
| | |--> repository/
| | |--> domain/
| | |--> view_mode/
| | |--> presenter/
| |--> feature_b/
| | |...
注意:我见过有人用上面的方式组织特征,而且层文件夹是顶级文件夹,包含每个层的特征子文件夹:
|...
|--> layers/
|--> data_source/
| |--> feature_a/
| |--> feature_b/
|--> repository/
| |--> feature_a/
| |--> feature_b/
|--> ...
无论如何,与 features/layers 文件夹不同,我认为没有关于如何组织核心文件夹的硬性规定。这真的是视情况而定。它可能包含:
- 在整个层中使用的模块(如您的示例)
- 强制清洁架构的合同(抽象 repository/datasoruce 类 等)
这是这样一个组织的example。