领域层和数据层之间的界限是可调整的。有些人更喜欢把所有与数据源相关的内容放在 Data 文件夹中,例如存储库不专门针对领域层。
// 来自 feature.notes.domain.data_sources.local
interface NoteLocalDataSource {
fun observeNotes(): Flow<List<NoteDomainModel>>
suspend fun insertNote(note: NoteDomainModel): Result<Boolean>
suspend fun fetchNoteById(id: Long): Result<NoteDomainModel>
}
复制代码
我们有了第一个业务逻辑文件夹:数据源。如前所述,我只包罗了一个本地文件夹。为了遵守里氏更换原则,我们创建了一个接口,包罗业务逻辑所需的方法。在返回数据时,我们将其封装到一个自定义的 Result 对象中(来自我们的公共模块)。这个密封接口由两个类构成:Success 和 Failure。实现这些方法不是领域层的责任,以是我们就到此为止。
// 来自 feature.notes.domain.repositories
suspend fun fetchNoteById(id: Long): Result<NoteDomainModel> {