C# 我不在我的项目中使用NHibernate是愚蠢的吗?

C# 我不在我的项目中使用NHibernate是愚蠢的吗?,c#,.net,nhibernate,C#,.net,Nhibernate,我正在开发一个.NETWeb应用程序,它使用一个SQL Server数据库,大约有20到30个表。 大多数表将作为类包含在.NET解决方案中。 我已经编写了自己的数据访问层,从中读取对象并将其写入数据库。 整个过程只由几个类和很少几行代码组成,en使用泛型和反射来找出要使用的SQL和参数。 现在,这样的事情可以通过使用NHibernate(或similair框架)来完成,一些同事声称我不使用它是愚蠢的。 我不使用它的主要理由是,我希望最大限度地控制我的应用程序,确切地知道每件事都做什么以及如何工

我正在开发一个.NETWeb应用程序,它使用一个SQL Server数据库,大约有20到30个表。 大多数表将作为类包含在.NET解决方案中。 我已经编写了自己的数据访问层,从中读取对象并将其写入数据库。 整个过程只由几个类和很少几行代码组成,en使用泛型和反射来找出要使用的SQL和参数。 现在,这样的事情可以通过使用NHibernate(或similair框架)来完成,一些同事声称我不使用它是愚蠢的。 我不使用它的主要理由是,我希望最大限度地控制我的应用程序,确切地知道每件事都做什么以及如何工作,即使这会花费我更多的开发时间。 我也不喜欢必须在XML文件中映射数据库的事实(我自己的解决方案允许我在实体类文件中映射数据库)

所以,我想从你们那里听到的是,在这种情况下不使用NHibernate真的很愚蠢吗?
我真的很无知,还是使用我自己的解决方案不是一个奇怪的想法?

我认为现在真的没有理由推出自己的持久性框架,因为有这么多好的选择。您不必使用NHiBiNT(虽然它是一个不错的选择),但我会认真考虑使用在行业中被测试和建立的东西,因为它会表现得更好,而且您编写的东西的bug更少。

编写自己的类而不是使用NHiBiNT可能是愚蠢的,但考虑到您已经编写了自己的类,继续使用自己的类就不那么愚蠢了。也许吧

人们倾向于使用已经编写好的框架,因为它们已经编写(并经过测试)

但是,你自己滚动是有好处的。只有你和你的同事才能对你的领域做出假设。像NHibernate这样的通用框架不能做出很多假设,因为这不会使它具有很强的通用性


当您使用自己的API时,您可以将这些假设烘焙到您的框架中,以生成一个更精简、更自然的API。也就是说,如果您重新开始,我会建议您使用现有的框架并将其包装以更好地满足您的需求。但是,既然你已经有了一些东西,而且它对你有用,我不确定我是否会建议你把它换成其他东西。

你有几种可能比重新发明轮子更好。让我列举两个最可能的选择:

  • 对DAL+DAO使用实体框架。这将使您的类(您已经编写)过时,因为EF将创建自己的类,您将了解最新的语言功能和技术

  • 使用Fluent NHibernate,这样就不必使用XML映射。这样,您就可以保留已编写的业务层对象类,并避免繁琐的NHibernation XML文件。都是C#

  • 你的思维方式很好。你想要控制。那很好。但是现在使用您自己的DAL有点愚蠢,因为您基本上是在重新发明轮子,而且您还没有测试/错误代码,这将花费相当长的时间来开发+测试+调试


    如果我是你,我会选择#2选项,因为我已经做了选项#1,我知道我必须定制很多东西,以使EF正常工作。EF将为V2做好准备。

    我不会说你愚蠢,因为我过去做过完全相同的事情。然后我开始使用NHibernate,我想知道为什么我自己滚。很好,试一试。

    我认为这是一个控制平衡的问题。你说你想要控制,你不想要映射。如果这种控制的代价是开发和维护成本增加,并且生成工作代码需要更长的时间,那么这就是一个问题

    我个人不认为滚动框架有什么问题,只要它简化了重复性的任务,并且由于较少的解释空间而使开发更高效,代码更稳定。我们已经推出了自己的框架,其中包括持久性/数据访问实现。不过,我们这样做的理由是明确的。在这种情况下,它将在DDD环境中工作,该环境与Evans所描述的比大多数现成产品所提供的更接近


    不过,我认为不同之处在于,我们了解到有一个前期成本,它最终将通过节省未来的开发时间来平衡自身。当然,如果您编写的代码必须手动管理连接、映射数据等,那么您可能走错了路。至少,您可以使用企业库之类的工具来帮助您管理繁琐的连接和命令构造。但是,我也认为,如果你没有重用——没有什么是可以抽象并应用到其他项目的“框架”类型的实现,然后,您将创建一个维护噩梦和时间接收器,您将成为它的唯一所有者。

    有许多经过良好测试并具有经验证的性能的优秀持久化工具(NHibernate、Linq to entities、LLBL Gen Pro)。如果您的需求与现有的普通持久性框架有很大不同,那么我将推出自己的持久性框架。然而,如果可能的话,我想利用现有工具的测试和优化


    话虽如此,如果我想拥有构建自己的ORM工具的经验,并愿意接受其缺点(没有经过多年测试或优化的工具,快速上市)。

    制定自己的解决方案,特别是当它看起来工作良好且像你说的那么简单时,他既不无知也不奇怪。在很多情况下,这样做比添加更好