加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

clean-architecture – Clean Architecture – 如何处理数据库事

发布时间:2020-12-12 08:56:43 所属栏目:MsSql教程 来源:网络整理
导读:在“干净架构”中,交互者(用例)负责定义业务逻辑.大多数示例以这种方式定义用例: public MyUseCase() { public boolean execute(...) { int id = repository.insert(a) if(id 0) { b.aId= id; repository.insert(b); ... } }} Interactors主要使用简单的CRUD
在“干净架构”中,交互者(用例)负责定义业务逻辑.大多数示例以这种方式定义用例:
public MyUseCase() {

  public boolean execute(...) {
    int id = repository.insert(a)
    if(id > 0) {
      b.aId= id;
      repository.insert(b);
      ...
    }
  }
}

Interactors主要使用简单的CRUD操作或存储库查询.
上面的示例在简单的情况下是同步的,但您可以使用异步解决方案(如回调或rxjava)以相同的方法找到repos.

但是用例不完整呢?例如,当你插入b时,你不能100%确定插入它后仍然存在.
如果在插入之后插入b时会得到一些RepositoryException,该怎么办?

我到目前为止看到的所有回购都没有考虑到,所以我的问题是:

清洁架构中上述问题的解决方案是什么?

解决方法

这个答案可能有点晚了,但我一直在努力解决同样的问题,并得出结论,事务管理实际上是用例的一部分 – 比如,“如果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()
    }
}

名称可能会有所不同,以抽象出完整性机制,但这个想法是一样的.我希望这会对某人有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读