gpt4 book ai didi

.net - 面向对象的正确模式

转载 作者:行者123 更新时间:2023-12-01 15:02:48 28 4
gpt4 key购买 nike

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

开发人员 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});

这样你就不用记得保存了,a类仍然只能保存一次。

是否有设计模式或其他文档证明方法正确,还是只是样式?

最佳答案

由于这是非常综合的示例,因此在不了解真实上下文的情况下很难判断什么是正确的方法。

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

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

常见的事件顺序是:

  1. 创建工作单元。
  2. 使用 Repository(映射到 UoW)对数据进行一些操作
  3. 使用 Repository 对数据进行其他操作
  4. 通过工作单元提交更改。

根据工作单元的实现,您可以

  1. 在开始时创建物理事务(或连接)并立即推送更改。它是第二种解决方案的灵活等价物。
  2. 创建物理事务并在结尾使用 UoW.Commit 提交
  3. 实现不同的离线锁定(悲观或乐观)。

所以,它是灵活的。单一方法解决方案不太灵活,尤其是当您需要添加另一个操作时,即

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

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

关于.net - 面向对象的正确模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26139870/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com