【发布时间】:2021-03-15 11:25:28
【问题描述】:
我正在申请 Clean Architecture,但实际上还有很多问题。
假设,我的 API @POST fun createJob(@Body request: JobRequest)。并且参数是从 UI 提供的。所以,
- 在
data:我创建了一个JobRequest,如下所示:
data class JobRequest(
@Expose @SerializedName("p1") val p1: String?,
...
@Expose @SerializedName("p7") val p7: String?
)
- 在
domain: 我创建了一个CreateJobUseCase,如下所示:
class CreateJobUseCase(private val userRepository: UserRepository) :
BaseUseCase<CreateJobUseCase.Input, Job>() {
override suspend fun execute(input: Input): Job {
return userRepository.createJob(input.p1, ...input.p7)
}
data class Input(
val p1: String,
....
val p7: String,
) : BaseInput()
}
- 在
presentation:我会从ViewModel打电话,比如:
createJobUseCase.execute(CreateJobUseCase.Input(p1, p2...p7)) {
//handle output
}
我的问题是:
在domain,我的UserRepository接口应该像A还是B?
A: suspend fun createJob(input: CreateJobUseCase.Input) : Job
or
B: suspend fun createJob(p1: String,... p7: String) : Job
在很多项目中,我看到他们使用B,似乎repository功能被清除了。但是,我认为A 仍然可以,因为它仍然遵循依赖规则,并且CreateJobUseCase.Input 已经包含了createJob 函数所需的内容。我错了吗?
【问题讨论】:
标签: android design-patterns use-case clean-architecture