OO右图

时间:2014-10-01 11:03:29

标签: .net oop

两位开发人员对哪种模式是正确的模式存在争议。如果有人能告诉我谁是对的,为什么会这样,我会很高兴。

开发者1:

类a有两个功能:

Remove(int item);
Save();

推理:

a.Remove(1);
a.Remove(3);
a.Save();

这样,您可以从其内部列表中删除项目,而不保存对数据库的更改。只要调用a.Save(),对象的内部状态就会保存到数据库中。

开发者2:

a类只有一个功能

Remove(List<int> items);

推理:

a.Remove(new List<int>{1,2});

通过这种方式,您不必记住保存和课程,但仍然只能保存一次。

是否有设计模式或其他证明正确方式的文件或仅仅是风格?

1 个答案:

答案 0 :(得分:1)

由于这是一个非常合成的例子,很难说出了解真实背景的正确方法。

在大多数实际情况下,首先解决方案更好,因为需要减少数据库请求数量和持续时间。

查看存储库和工作单元模式。

常见的活动顺序是:

  1. 创建工作单元。
  2. 使用Repository(映射到UoW)对数据执行一些操作
  3. 使用存储库
  4. 对数据执行其他操作
  5. 通过工作单元提交更改。
  6. 取决于您可能

    的工作单元实施情况
    1. 在开头创建物理事务(或连接)并立即推送更改。它与第二种解决方案相当灵活。
    2. 创建物理事务并使用UoW.Commit
    3. 在结尾处提交
    4. 实施不同的离线锁(悲观或乐观)。
    5. 所以,它很灵活。单方法解决方案不太灵活,特别是如果有一次你需要添加另一个动作,即

      Remove(1,2);
      Add(5);
      

      粗略地谈论数据访问和域层,从视角来看,它可能导致数据库逻辑泄漏,而其他当前被认为是反模式(对于大多数情况)的事情,如Active Record。