.net OO右模式
两位开发人员就哪种模式是正确的存在争议。如果有人能告诉我谁是对的,为什么,我会很高兴 开发者1: a类有两个功能:.net OO右模式,.net,oop,.net,Oop,两位开发人员就哪种模式是正确的存在争议。如果有人能告诉我谁是对的,为什么,我会很高兴 开发者1: a类有两个功能: Remove(int item); Save(); 理由: a.Remove(1); a.Remove(3); a.Save(); a.Remove(new List<int>{1,2}); 通过这种方式,您可以从其内部列表中删除项,而无需将更改保存到数据库。只要调用.Save(),对象的内部状态就会保存到数据库中 开发者2: 类只有一个函数 Remove(Lis
Remove(int item);
Save();
理由:
a.Remove(1);
a.Remove(3);
a.Save();
a.Remove(new List<int>{1,2});
通过这种方式,您可以从其内部列表中删除项,而无需将更改保存到数据库。只要调用.Save(),对象的内部状态就会保存到数据库中
开发者2:
类只有一个函数
Remove(List<int> items);
删除(列表项);
理由:
a.Remove(1);
a.Remove(3);
a.Save();
a.Remove(new List<int>{1,2});
a.Remove(新列表{1,2});
这样,您就不必记住保存,类a仍然只能保存一次
是否有设计模式或其他文件证明了正确的方法,还是仅仅是风格?由于这是一个非常综合的例子,在不了解真实背景的情况下,很难判断什么是正确的方法
在大多数实际情况下,第一种解决方案更好,因为需要减少数据库请求数量和持续时间 看看存储库和工作单元模式 常见的活动顺序是:
Remove(1,2);
Add(5);
谈到数据访问和域层,从长远来看,它可能会导致数据库逻辑泄漏和其他当前被认为是反模式(大多数情况下)的事情,如活动记录。第二种情况有两个职责:删除和保存。因此,我更喜欢第一种情况。在后一个示例中,您不需要记住如何保存,您的语句中没有任何内容表明“Remove”也会持续存在于数据库中;这是一个偏好问题:为了灵活性,我不明白为什么这两种方法都不公开,但“保存”是作为“删除”的一部分发生还是显式地单独发生是特定于您的场景的设计决策-尽管第二种情况隐藏了后果,这可能是不受欢迎的。这个问题应该出现在programmers.stackexchange.com或codereview.stackexchange.com上。注意,像EF和NHibernate这样的ORM对正常操作使用模式#1,对批处理/直接操作使用不同的函数(甚至接口),如果您将来要添加函数(如Update或Insert)或执行保存到数据库的任何函数,并使用后一种方法,而不是误用已用于其他目的的函数名,那么这不会导致每个函数中保存的代码重复吗?“在大多数实际情况下,第一种解决方案更好,因为需要减少数据库请求数量和持续时间。“-答案正确,主要原因错误。@MitchWheat,解释一下。您喜欢包含关于责任、可维护性、可靠性等复杂和煽动性理由的答案吗?我甚至不会根据这个特定的案例来谈论一般的设计原则。一些技术材料(事务、日志、其他“副作用”…)可以透明地应用于不同的操作。因此,只要正确、跨协议地实施了更改和立即保存本身就不是问题(当然,这也是实际需要所必需的)。此外,一些框架不需要明确的“保存”并在每次模型更改时推动更改。