什么应该是CRUD?

时间:2014-08-20 06:47:19

标签: c# entity-framework crud

我阅读了很多关于CRUD的文档,但我仍然不明白究竟应该是什么样的CRUD!似乎大多数人都在谈论CRUD实体,但他们的架构并没有在他们的实体中显示任何创建,读取,更新或删除方法。它们在单独的类中实现这些CRUD操作。我喜欢称这类CRUD控制器。

使用CRUD控制器创建POCO entrite是否正确?什么应该是CRUD?

3 个答案:

答案 0 :(得分:0)

我的看法是你应该有一个执行CRUD操作的存储库。

然后,控制器应该可以通过中间服务层调用存储库中的相应CRUD方法。

详细了解存储库模式herehere

答案 1 :(得分:0)

这些类通常称为存储库。存储库提供对实体的访问,包括添加,更新,删除和检索一个或多个实体。因此存储库创建,读取,更新和删除(CRUD)。

使用数据库时,POCO通常是数据库实体转换为的对象,例如:使用AutoMapper在存储库中。

答案 2 :(得分:0)

在架构方面,CRUD意味着您拥有没有业务规则的实体。这个实体最多只有一些简单的验证。当你有这种实体时,你会说CRUD,因为你可以修改数据而不用担心其他任何事情(但是验证)。例如,这可用于维护联系人列表:姓名+电话号码。 +地址:最多可以验证名称是否为空,电话号码是否为空。有效,地址有效。但那里没有商业规则。

如果涉及业务规则,则应避免使用CRUD来确保遵守业务规则。例如,您不应允许CRUD获取订单明细,因为涉及业务规则:如果订单已经支付或发送或确认给客户,则可能无法更改订单明细。此外,总订单金额取决于订单详情。在这种情况下,您应该将订单及其详细信息作为一个整体使用,并一次性读取/写入/更新所有订单。 (在DDD中,这被称为“聚合”)。

谈到CRUD并不是一个如何实现它的问题(存储库,ORM,如DbContext或NHibernate,或者你想要使用它们),而是一个更哲学的问题。

实现CRUD比实现涉及业务规则的任何其他体系结构(例如DDD)要快得多。如果您可以将CRUD用于实体,建议您使用它,但不能在其他情况下使用。

关于你的评论:

  

但他们的架构在其实体中没有显示任何创建,读取,更新或删除方法

这很自然......例如,您可以使用EF进行CRUD,而无需明确声明CRUD方法。在上下文中创建一个实体,或删除它或修改它,并在SaveChanges上隐式执行CRUD操作。