C# 评估会出现,最终会节省大量的时间和精力。

C# 评估会出现,最终会节省大量的时间和精力。,c#,orm,enterprise,C#,Orm,Enterprise,有很多常见的问题,像Hibernate这样的ORM工具是上帝派来解决的,也有一些是障碍。我对你的项目了解不够,不知道它是哪一个 Hibernate的优点之一是,您只能说3次:类、.hbm.xml文件和数据库中都提到了每个属性。对于SQL查询,您的属性位于类、数据库、select语句、insert语句、update语句、delete语句以及所有支持SQL查询的编组和反编组代码中!这会很快变得一团糟。另一方面,你知道它是如何工作的。你可以调试它。它就在你自己的持久化层中,而不是隐藏在第三方工具的内部

有很多常见的问题,像Hibernate这样的ORM工具是上帝派来解决的,也有一些是障碍。我对你的项目了解不够,不知道它是哪一个

Hibernate的优点之一是,您只能说3次:类、.hbm.xml文件和数据库中都提到了每个属性。对于SQL查询,您的属性位于类、数据库、select语句、insert语句、update语句、delete语句以及所有支持SQL查询的编组和反编组代码中!这会很快变得一团糟。另一方面,你知道它是如何工作的。你可以调试它。它就在你自己的持久化层中,而不是隐藏在第三方工具的内部

Hibernate可能是斯波尔斯基抽象泄漏定律的典范。稍微偏离常规路径,您需要了解该工具的深层内部工作原理。当您知道可以在几分钟内修复SQL时,这可能会非常烦人,但是您却花了数小时试图诱使您的dang工具生成合理的SQL。调试有时是一场噩梦,但很难说服没有调试过的人

编辑:如果iBatis.NET不打算改变对NHibernate的看法,并且希望控制其SQL查询,那么您可能需要查看iBatis.NET


编辑2:这里有一个大的危险信号:“良好的实践,在堆栈溢出上被认为是很正常的,例如单元测试或连续集成,到目前为止,在这里还不存在。”那么,这些“有经验”的开发人员,他们在开发方面有什么经验?他们的工作保障?听起来你可能是对这个领域不感兴趣的人之一,所以不要让他们扼杀你的兴趣。你需要成为平衡。进行斗争。

首先让我说,如果适当集成,ORM可以使您的开发生活更轻松,但是有一些问题,ORM实际上会阻止您实现所述的需求和目标

我发现,在设计性能要求很高的系统时,我常常面临着如何使系统性能更高的挑战。很多时候,我最终得到的解决方案具有很高的写入性能(这意味着我们写入数据的数量远远超过读取数据的数量)。在这些情况下,我希望利用数据库平台提供给我的设施来实现我们的性能目标(它是OLTP,而不是OLAP)。所以,如果我使用的是SQL Server,并且我知道我有很多数据要写,为什么我不使用大容量插入。。。嗯,正如您可能已经发现的,大多数orm(我不知道哪怕是一个orm)都没有能力利用特定于平台的优势,比如批量插入


您应该知道,您可以混合ORM和非ORM技术。我刚刚发现,在少数边缘情况下,ORMs无法支持您的需求,您必须解决这些情况。

ORMs有两个方面令人担忧。首先,它们是由其他人编写的代码,有时是封闭源代码,有时是开放源代码,但范围很大。其次,他们复制数据

第一个问题导致两个问题。您依赖的是外部代码。我们都这样做,但这样做的选择不应掉以轻心。如果它不能满足你的需要呢?你什么时候会发现这个?你生活在ORM为你画的盒子里

第二个问题是两阶段提交。正在将关系数据库复制到对象模型。您更改了对象模型,它应该更新数据库。这是一个两阶段提交,并不是最容易调试的事情。

就我个人而言,我(直到最近)一直反对使用ORM,并且习惯于编写封装所有SQL命令的数据访问层。对ORMs的主要反对意见是,我不相信ORM实现能够准确地编写正确的SQL。而且,从我以前看到的ORMs(主要是PHP库)来看,我认为我完全正确

现在,我的大部分web开发都使用Django,我发现包含的ORM非常方便,而且由于数据模型首先用它们的术语表示,然后才用SQL表示,因此它确实非常适合我的需要。我相信,要摆脱它不会太难,需要用手工编写的SQL进行补充;但对于CRUD来说,访问就足够了

我不知道NHibernate;但我想它也“足够好”满足你的大部分需求。但是如果其他程序员不相信它;它将是每一个与数据相关的bug的主要嫌疑犯,这使得验证更加繁琐


你可以试着在你的工作场所逐步引入它,首先关注小的“显而易见的”应用程序,比如简单的数据访问。过了一段时间,它可能会被用于原型,也可能不会被取代…

我认为,当你在更大的系统上工作时,也许你可以使用像CodeSmith这样的代码生成器工具,而不是ORM。。。我最近发现:它可以生成SQL Server存储过程,还可以生成您的业务实体、映射器、网关、lazyload以及C#中的所有东西……看看吧……它是由阿根廷的一个团队编写的


我认为它是在编码整个数据访问层的中间,使用ORM…

首先,使用ORM不会使代码更容易测试,也不会在连续集成SeNeRivi.T/P>中提供任何优势。 根据我的经验,虽然使用ORM可以提高开发速度,但您需要解决的最大问题是:

  • 测试代码
  • 维护代码
  • 解决这些问题的办法是:

  • 使您的代码可测试(使用原则)
  • 为尽可能多的代码编写自动化测试
  • 尽可能经常地运行自动化测试