Mar*_*cin 10 clean-architecture interactors
在"干净架构"中,交互者(用例)负责定义业务逻辑.大多数示例以这种方式定义用例:
public MyUseCase() {
public boolean execute(...) {
int id = repository.insert(a)
if(id > 0) {
b.aId= id;
repository.insert(b);
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
Interactors主要使用简单的CRUD操作或存储库查询.上面的示例在简单的情况下是同步的,但您可以使用异步解决方案(如回调或rxjava)以相同的方法找到repos.
但是用例不完整呢?例如,您不能100%确定插入后a它仍然会在插入时存在b.如果在插入后,a你得到一些RepositoryException同时插入b.
我到目前为止看到的所有回购都没有考虑到,所以我的问题是:
清洁架构中上述问题的解决方案是什么?
Mik*_*kin 10
这个答案可能有点晚了,但我一直在努力解决同样的问题,并得出结论,事务管理实际上是用例的一部分 - 比如,"如果B出现问题,还原A的状态".因此,它可以而且应该在您的UseCase中明确说明,可能使用某种"DataManagerRepo",如下所示:
public MyUseCase() {
public boolean execute(...) {
dataManagerRepository.openTransaction()
try {
int id = repository.insert(a)
if(id > 0) {
b.aId= id;
repository.insert(b);
...
}
catch (MyException exc) {
dataManagerRepository.rollbackTransaction()
}
dataManagerRepository.commitTransaction()
}
}
Run Code Online (Sandbox Code Playgroud)
名称可能会有所不同,以抽象出完整性机制,但这个想法是一样的.我希望这会对某人有所帮助.
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |