向POCO添加PetaPoco属性是否有任何负面影响?

时间:2012-04-11 14:38:28

标签: petapoco

我们当前的应用程序使用智能对象样式来处理数据库。我们正在寻找转移到PetaPoco的可行性。查看我注意到的功能,您可以添加属性以使CRUD对象更容易。添加这些属性是否会产生任何我应该注意的负面影响?

有没有人找到不使用这些装饰器的理由?

2 个答案:

答案 0 :(得分:2)

直接使用POCO对象实例本身? 无。

至少不是我会注意到的。 Jon Skeet应该能够提供更多信息,因为他知道编译器内部的工作情况,所以他确切地知道编译后这个元数据会发生什么。

与这些

间接相关的其他影响

当访问这些声明性属性时,当然会有一些含义,因为它们是使用反射读取的,这通常是一个缓慢的过程。

但是这里没有什么可担心的,因为PetaPoco是一个智能库,只读一次然后编译和放大缓存这些东西,所以你只会受到一次惩罚,然后你会获得惊人的表现。因为它使用编译的代码。

与绩效无关的影响

通过在您的类/属性/方法上放置属性(any),您可以将代码绑定到将使用此类的特定引擎,因为它们是此特定引擎的指令,用于理解您的代码。

如果是PetaPoco属性,这意味着您的类可以与PetaPoco一起使用,但不能与其他DAL(即EF)一起使用,除非您也添加了该类的属性(EF Code First使用与属性完全相同的方法)

第二个含义与后端数据库有关。如果您将PetaPoco属性中提供的表,列或任何其他部分重命名为常量 magic 字符串,则随后还必须更改此字符串。这只意味着在进行数据库更改时必须彻底......

答案 1 :(得分:2)

一个缺点是它打破了“域”层和“数据”层之间的分离,因为它将PetaPoco文件(包含数据逻辑)引入了域类,这些域应该真的没有任何知识或依赖于数据层。

如果您正在使用单项目MVC应用程序或其他什么,那么可以只使用Models目录,但对于非平凡和分离的应用程序,您将必须有两个PetaPoco文件或玩弄抽象文件的一部分是为了注释你的模型而不让他们“了解太多”底层数据,或者让你在整个地方指定表和/或主键名称。