从LINQtoSQL转移到Nhibernate的争论?

时间:2010-04-09 21:21:28

标签: nhibernate linq-to-sql project-management

Backstory:大家好,我花了很多时间在这里和其他网站上阅读了许多LINQ vs Nhibernate线程。我在一个由4人组成的小型开发团队工作,我们甚至没有任何超级经验丰富的开发人员。我们为一家拥有大量技术需求但却没有足够开发人员实施这些项目的小公司工作(现在招聘更多人是不可能的)。

通常我们的项目(个别相当小)已经单独编码,并且无论如何都没有真正分层,代码没有被重用,没有类库,我们只是使用LINQtoSQL .dbml文件来实现我们的项目,我们甚至不使用对象,但传递值和东西,我们使用对象的唯一时间是插入数据库(甚至不查询,因为你不需要将它分配给一个类型,只能绑定到网格视图)。尽管如此,正如我所说,我们公司有很多技术需求,没有人可以来我们一年,我们将有大量的工作来实现所要求的功能。

我决定先通过创建类库并实际向应用程序添加图层来改变它。有一个很好的机会,可以制作一些具有全面功能的优秀应用程序。我试图通过仍然使用LINQtoSQL作为ORM来中途遇到这些人,并且仍然使用VB作为语言。但是我发现它在LINQtoSQL中处理了很多事情,我在Nhibernate中发现很容易(自动处理会话,标准创建比表达式树更容易,通用动态查询更容易等等)。所以。 ..

问题:我如何说服我的首席开发人员和其他高级程序员转换为Nhibernate是一件好事?控制我们的域对象是一件好事吗?能够实现接口是一个好处?我之前尝试过这种优势,但是他们并没有理解这一点,因为他们从来没有在真正的OO&分层的方式。

此外我可以看到的一个计数器参数是sqlMetal自动生成这些类,因此节省了大量时间。除了说要花更多的时间在基础设施上以使其更具可扩展性和灵活性之外,我无法真正反驳这一点,但他们看不出如何。

同样,我知道每个的特征和优点(我有点相信),但我需要适用于我的背景的论据,因此我提供了背景故事。我想我不是一个非常好的论证者。

(警告:对于所有LINQtoSQL爱好者,我可能不会像LINQ那样超级精通,但我觉得你需要为动态查询下载一些额外的库非常麻烦,而这些动态查询默认情况下不支持guid比较,我也发现更新权利的方式在数据上下文管理方面也很麻烦,所以它可能就是我吮吸嘿嘿。)

2 个答案:

答案 0 :(得分:1)

转换为始终让人们信服的新技术的主要论点是:“在项目中大约节省你的团队x小时”。他们会将其与“学习新技术花费z小时”这一论点进行比较。这将是您的团队的心理转换和学习曲线。当您处理许多较小的项目时,将“学习时间”与多个项目的“保存时间”进行比较可能是正确的。有时将现有项目转换为新技术是值得的,有时最好在新项目上使用新技术。您可以通过表明您已准备好使用新技术并考虑如何为您的团队提供帮助以及更快地学习新技术的方向来使您的论点更加强大。

答案 1 :(得分:1)

在我看来,Linq2Sql可能更适合你试图摆脱的开发模式。当您进入更丰富的域模型时,迁移到NHibernate的原因将变得更加明显。我能看到的一些最大问题是:

  1. Linq2Sql不像NHibernate那样是可扩展的(拦截器等......)。
  2. Linq2Sql只能真正处理对父/子级别的热切加载。一旦你达到父母/子女/孙子女的关系,事情就会开始发挥作用。
  3. NHibernate的HQL使得比Linq语法更容易控制为棘手的查询生成SQL的方式。