EF 4.1 Code First - 我应该使用啥模式?

Posted

技术标签:

【中文标题】EF 4.1 Code First - 我应该使用啥模式?【英文标题】:EF 4.1 Code First - What pattern should I use?EF 4.1 Code First - 我应该使用什么模式? 【发布时间】:2011-07-26 05:22:07 【问题描述】:

我正在学习 EF Code First,但我正在为在我的应用程序中使用哪些模式而苦苦挣扎。我读过许多相互矛盾的建议和论据,有些人说您应该使用存储库模式,而另一些人则说这样做是多余的,我倾向于同意。

这是我的delim:

假设我正在构建一个允许我管理客户的 REST Web 服务。该服务将允许我添加客户、删除客户、编辑客户以及查找客户。

我应该:

A.) 我的问题归结为我的业务逻辑应该去哪里。我是否应该有一个 CustomerManager 类来提供接受客户实体的 Add、Edit、Delete 和 Find 方法?我的验证逻辑应该放在那些方法中吗?

B.) 当我的 Customer 实体具有 Save()、Delete() 和 Find() 方法并且所有验证登录都在 Customer 类内部完成时,我应该使用 Active Record 开发风格吗?

C.) 我应该做某种类型的混合,其中简单的验证逻辑在实体本身上。这可以通过代码优先属性来完成。我也可以在实体上有一个简单的保存方法。然后,我可以在 CustomerManager 类中执行复杂的业务验证逻辑、delete()、finds() 和多实体保存?

我有点倾向于选项 C。过去我通常使用 Manager/Service 类来保持我的实体非常简单。但是,由于代码首先在实体级别进行实体属性验证,所以似乎所有简单的实体验证都应该去那里。

我意识到这可能有点像宗教话题,但我想获得一些其他选择,以了解如何以最佳方式组合一个可靠的应用程序。

【问题讨论】:

你最终选择了什么?你对你的决定满意吗?现在,面对同样的决定,我倾向于选择 Active Record 模式。 【参考方案1】:

EF 4.1 代码优先将工作单元与数据映射器模式相结合。

所以,我不建议使用活动记录模式。

带有实体框架的存储库模式是常见的解决方案。如果你想要一些简单的验证逻辑,你可以使用与实体框架配合良好的 DataAnnotations。

这是使用 EF 实现存储库模式的简单示例:

http://www.efekaptan.com/repository-pattern-with-entity-framework-code-first-4.1

【讨论】:

以上是关于EF 4.1 Code First - 我应该使用啥模式?的主要内容,如果未能解决你的问题,请参考以下文章

EF 4.1:使用 Fluent 映射从 Code First 中查找关键属性类型

使用EF 4.1 Fluent Code First的每类型表继承

如何使用 Code-First EF 4.1 从数据库中删除多个项目

EF 4.1 中使用 Code First 的 ComplexType 集合属性

使用共享主键关联时,EF 4.1 Code First 中的级联删除规则

在使用 EF 4.1 Code-First 的 Include 和/或 Select 方法时订购导航属性?