Ali*_*ssa 2 .net c# entity-framework poco
我一直在阅读关于POCO(普通旧CLR对象)的一段时间,但仍然找不到使用它而不是使用实体框架的自动生成的部分类的真正附加价值?还有一件事是最好直接从表示层使用我的实体框架,还是创建BLL会更好?
Moo*_*Moo 10
POCO的主要好处是您可以将它传递给不需要了解Entity Framework的类,库或程序集来完成它的工作.
记住单一责任原则 - 您的DAL应该知道EF,但您的域名不应该,而且您的表示层也不应该,因为EF处理数据访问而这些层不处理.将EF生成的类对象传递到这些层通常意味着您需要使这些层知道EF,破坏SRP并使单独测试这些层变得更加困难.
为了回应阿里在下面评论中的进一步询问,这里有一个扩展的解释.
在更复杂的应用程序中,您需要将逻辑拆分为单独的关注点 - 数据访问,业务逻辑,表示(可能还有更多).
当实体框架处理数据访问时,它驻留在数据访问层中 - 在这里,您将看到POCO和EF生成的类之间几乎没有区别.这很好,因为该层已经了解了Entity Framework.
但是,您可能希望将数据传递到业务逻辑层 - 如果您使用EF生成的类执行此操作,那么您的业务逻辑层也必须了解实体框架,因为EF类依赖于EF特别提供的许多内容.这样做是为了消除业务逻辑层应该具有的隔离 - 您需要这种隔离,这样您就可以通过从虚假数据访问层将已知数据注入到类中来正确地对其进行单元测试,如果您让这个非常难以做到业务逻辑层了解EF.
使用单元测试,您应该测试图层功能,而不是第三方库的功能 - 但是使用EF,您最终会测试很多EF的功能,或者您自己的功能非常依赖于EF的功能.这不好,它可以掩盖错误或问题.
删除对EF生成的类的业务逻辑依赖性还允许您从数据访问层将层移动到远程位置 - 您甚至可以将其粘贴在Web服务之后,它将非常高兴.但是你只能用POCO来做这件事,你不能用EF生成的类来做这件事.
POCO在大型,复杂的多层应用程序中真正发挥作用 - 如果你没有分层你的应用程序,那么你就不会看到一大堆好处.
所有这些都是我的观点,我只是一个有经验的编码员 - 我不是编码摇滚明星,所以其他一些评论者可能希望进一步扩展我的答案......