N-Tier - 插入与更新的责任位置

Posted

技术标签:

【中文标题】N-Tier - 插入与更新的责任位置【英文标题】:N-Tier - responsbility location for insert vs update 【发布时间】:2011-08-23 10:59:39 【问题描述】:

我正在创建一个应用程序,该应用程序分为数据层(使用存储库模式和 EF 4.0)、业务层(具有附加逻辑的 POCO)和服务层(使用 WCF 向客户端公开)。

当我将记录保存到数据库时,我需要检查我是在更新现有记录还是插入新记录。该责任应该在哪里 - 在服务层中,以便明确管理对象的生命周期,或者在数据层中,以便保存记录将隐含地确定要采取的操作。

欢迎所有 cmets - 我不能自己决定!

【问题讨论】:

【参考方案1】:

我的第一个想法是,我认为这是 Entity Framework 应该能够自行解决的问题,但我对此不是 100% 确定的。

除非 EF 为你做这件事,否则我会将这个逻辑放在存储库中。您将客户对象传递给存储库,如下所示:myRepository.Save(myCustomer);

然后在客户的 Save 方法中,它会检查客户是否分配了 ID,或者您可以要求 EF 跟踪其状态,然后执行插入或更新。这样,无论在哪里调用 Save ——Web 服务、UI 等,这个逻辑都会得到处理。

【讨论】:

【参考方案2】:

如果有任何业务规则适用于保存业务对象,则责任在业务层,否则应由日层负责。

您使用的是 EF 应该无关紧要。

【讨论】:

以上是关于N-Tier - 插入与更新的责任位置的主要内容,如果未能解决你的问题,请参考以下文章

什么是 N 层架构?

经典软件架构设计模式

MVC 和 N 层架构

EF4 独立协会 - 为啥要避免它们?

如何通过 WCF(n 层)同步两个 Sql Compact 版本数据库

利用SQL语句插入更新删除数据表中的数据