【问题标题】:nHibernate versus LLBLGen PronHibernate 与 LLBLGen Pro
【发布时间】:2010-11-09 23:55:04
【问题描述】:

我正在尝试使用 ORM 工具移动到并将其缩小到两个候选人。

nHibernateLLBLGen Pro

请你们告诉我使用这两种工具的优缺点,特别是如果你有这两种工具的经验的话。我对任何其他工具都不是很感兴趣,但我想要一些提示,以便我可以决定花时间学习哪个工具....

我已经知道一个是免费的,一个不是,我也知道 nHibernate 可能需要一些学习....

非常感谢,理查德

【问题讨论】:

    标签: nhibernate llblgenpro


    【解决方案1】:

    我都用过。起初我在 nHibernate 上被卖掉了,尽管我知道其他选择,但我拒绝尝试其他任何东西。

    对于 LLBLGen Pro,我持怀疑态度,但很快也看到了优势。我还没有完全放弃 nHibernate。我将继续将 int 保存在我的“工具箱”中。我发现 LLBLGen 在某些情况下很有用,尤其是在与已经存在的数据库交互并且您别无选择重新设计它时。从数据库生成我的 LLBLGen 实体对象需要不到一个小时(当然取决于数据库的大小),而不是必须使用 nHibernate 手动编写所有代码,并进行映射。 nHibernate 缺少一个很好的图形界面来创建映射。当数据库庞大且您可能需要在应用程序中访问数千个表时,这一事实变得更加重要。

    虽然 LLBLGen 更像是一个数据访问层生成器(而且我通常不是 DAL 生成器的粉丝),但它具有许多“真正的 ORM”工具应该具备的功能。在我看来,它两全其美。一旦开始使用它,您就会开始意识到它非常灵活和可扩展。我非常喜欢的部分是我可以为生成的实体对象创建部分类,我可以在其中编写业务逻辑以及验证代码。

    代码生成是模板化的,因此您可以完全控制它生成的代码。使用 nHibernate,我发现自己一遍又一遍地编写一些相同类型的代码。使用 LLBLGen,我可以生成它并更快地专注于业务逻辑和问题。

    对于刚开始使用 ORM 类型工具的人,我真的建议从 LLBLGen 开始,因为 nHibernate 可能会让人不知所措。最终您将获得相同的结果(或多或少)。

    编辑 #1: LLBLGen 现在也 100% 支持 LINQ。 (因此,如果您因此喜欢 LINQ to SQL)进一步 LLBLGen 可以支持许多数据库,其中 LINQ to SQL 仅适用于 Microsoft SQL 数据库。

    编辑#2: According to Graviton 你可以使用 CodeSmith 为你的 nHibernate 生成一些代码。这真的很酷,但对于 ORM 的新手,我仍然会推荐 LLBLGen。对我来说,这是添加更多的依赖项,LLBLGen 将所有这些都集中在一个包中。就像我之前说的那样,学习曲线不那么陡峭了,您将获得相同的好处,如果您决定去那里,这也将帮助您轻松适应 nHibernate。

    【讨论】:

    • 如果您正在寻找 NHibernate 的代码生成功能,您可以查看 CodeSmith;它有休眠支持:itscommonsensestupid.blogspot.com/2009/04/…
    • NHibernate 支持 Linq。您是否尝试过 Active Writer(NHibernate 的图形设计器)? using.castleproject.org/display/Contrib/ActiveWriter
    • @StampedeXV 这些事情几乎肯定有简单的解决方法,你在 LLBLGen 论坛上提到过吗?根据我的经验,大部分时间 LLBLGen 团队都会在几天(有时是几小时)内通过新版本解决错误。
    • 我们使用 LLBLGen LINQ 处理极其复杂的东西而不会出现问题。它不是领域驱动开发的最佳工具,但如果您喜欢先从数据库的角度思考问题,那么它无疑是赢家。
    • LLBGen 第 3 版现在针对 NHibernate、实体框架和 Linq to SQL。
    【解决方案2】:

    主要区别在于 LLBLGen 是一个代码生成器,而 NHibernate 是一个“真正的” ORM 库。

    LLBLGen 优势

    • 易于使用的模型设计器。可以导入您现有的数据库架构
    • 全类型对象模型和查询语言

    LLBLGen 的缺点

    • 您需要设计器应用程序来更改您的模型
    • 不是免费的
    • 会因为生成大量代码而导致代码膨胀

    NHibernate 优势

    • 无需设计器应用程序。只有代码
    • 广泛使用(基于最流行的 Java ORM,Hibernate)
    • 非常强大,可以映射您可以想象的任何数据模型
    • 开源

    NHibernate 的缺点

    • 难学
    • 不像人们想要的那样强类型(尤其是查询)

    当然,这只是我个人的观点……

    【讨论】:

    • 那么你最喜欢哪一个?你会推荐哪一个?
    • 我不会选择任何一个,但我不得不同时使用它们,而且我更喜欢 NHibernate 而不是 LLBLGen。原因是我讨厌依赖外部代码生成工具,但这是个人的事情:)
    • 我两者都用过,一般来说我会选择 LLBL ...主要是因为 LLBL 可以让您以更少的工作/代码启动并运行。如果您可以比抽象的域对象更多地与数据库表相关联,那么 LLBL 适合您。
    • 菲利普 - 不正确。 LLBLGenPro 是一个带有内置代码生成器的 ORM,而不仅仅是一个代码生成器。
    • 没有代码生成器就不能使用LLBLGen,所以它本质上是一个代码生成器,即使生成的代码调用了内部的ORM库
    【解决方案3】:

    在意识到这是一个有点老的问题之前,我输入了一个相当长的答案。那好吧。它仍然非常相关。

    您已将列表缩小到 .NET 世界中 ORM 的两个最佳候选者。我对两者的经验都有限,但我已经广泛阅读了两者的优缺点。它们确实以不同的方式满足不同的需求。

    在即将发布的 LLBLGen Pro 3.0 中,Frans Bouma 谈到了添加功能以生成 NHibernate 映射。因此,这甚至不一定是非此即彼的决定。

    如果你想做“类优先”设计(而不是“数据库优先”设计),NHibernate 几乎是你现在最好的唯一选择(LLBLGen Pro 和 Entity Framework 都不支持这种模式,虽然听起来像Entity Framework 正在改进它在下一个版本中的支持)。

    NHibernate 和 LLBLGen Pro 都努力与您无法更改且必须忍受的遗留数据库一起工作。那是他们共同的力量。他们都与 Linq 一起工作。它们也都支持一定数量的图形建模,虽然 LLBLGen Pro 在这方面要好得多(ActiveWriter for NHibernate 感觉就像 Visual Studio 中的 LinqToSql 设计器,但功能并不丰富)。

    LLBLGen Pro 具有更强大的代码生成能力,但过多的代码生成会导致可测试性和可维护性受损(一个小的调整可能会导致大量代码需要重新测试)。

    虽然 NHibernate 希望帮助您处理相当复杂的对象/关系映射场景,例如类继承,但 LLBLGen Pro 实际上只是以非常快速的方式将您的数据库公开为数据层和业务对象。

    如果您可以购买 LLBLGen Pro 并有一些时间,我会尝试两者,看看哪一个更能满足您的需求。无论如何,学习这两种 ORM 对你的简历都有好处。

    所以,最后,我会说这是情境性的。在大多数情况下,NHibernate 的成本及其缺乏严重缺陷的情况非常引人注目。

    【讨论】:

    • 感谢您的评论...我投票支持您!我还在考虑这个!
    【解决方案4】:

    新版本的 LLBLGen Pro (3.0) 允许您为 NHibernate 生成代码,因此不必选择:)。它还允许您将实体拆分为不同的域。

    虽然我仍然更喜欢 LLBLGen pro 运行时,但 LINQ 解释器更完整,并且具有更好的字段更改跟踪。

    不幸的是,新的 LLBLGen Pro 3.0 运行时没有太多新功能,因为创建者首先希望更多地关注工具而不是改进现有框架。

    【讨论】:

    • 请注意,3.1(最近发布)包括 LLBLGen Pro 运行时的速度和内存管理增强功能。
    【解决方案5】:

    我使用过 nHibernate、LLBLGen Pro、来自我的咨询公司的自定义数据层、Enterprise Library 和 LINQ。 LLBLGen 是迄今为止我最喜欢的,它允许编写一个业务层,该业务层可以使用相同的代码与不同类型的数据库通信,从而提供数据库独立性!另一个令人难以置信的功能是它允许多个连接到不同的数据库。当在一家大公司并且一个系统是用 Sql Server 编写的,而另一个你必须与之交互的是 Oracle 时,这非常有用。

    LLBLGen Pro 是一款由 Frans 支持的出色产品,Frans 非常活跃并努力解决问题。 LLBLGen 就像 PhotoShop,它是一个令人难以置信的工具,并且可以在知道如何使用的人手中产生惊人的效果。就像任何可以节省大量时间的工具一样,学习如何使用它需要一到两周的时间,但会在以后的项目中节省数月时间。

    它不仅加快了我的应用程序的 DAL 生成速度,而且还很容易在业务层创建查询并发送到表示层。它使创建企业级应用程序变得容易。

    如果真的想使用 nHibernate,请从 LLBLGen Pro 开始并生成 nHibernate 代码。如果稍后您的部门决定从 nHibernate 切换到 LINQ,那么您将得到保障。想从 Sql Server 切换到 Oracle?使用 LLBLGen 这是可能的并且相对容易,而使用手动编码的 nHibernate 代码,您必须重写几乎不可能成本合理的所有内容。

    Frans 也有空并回答了我的一些问题。

    【讨论】:

      【解决方案6】:

      不要忘记 Hibernate 的最大优点之一:HQL。使用 HQL,不会浪费您的 SQL 技能。 Hibernate 也为原生查询提供了非常好的、无缝的支持。 如果你有一些奇怪的、不符合标准的数据库,那么几乎可以肯定你在某些时候需要你的 SQL 技能,祝你在 LLBL 上好运!

      【讨论】:

      • 我同意并尊重 nHibernate。但也请不要敲 LLBL,因为它确实支持原生 SQL。 LLBL 的不同之处在于它是相反的,数据驱动的。 nHibernate 是域驱动的,您可以将数据库的内容推迟到开发的很晚。
      • 如何在 LLB 中运行本机 SQL 是一个非常严格保密的秘密。来吧,在论坛上问他们怎么做! :)
      【解决方案7】:

      对我来说,它归结为以数据库为中心 (LLBLGen Pro) 与以域模型为中心 (NHibernate)。

      因为我是一个 DDD/OO 人,所以选择对我来说一直很容易,但我明白为什么 LLBLGen Pro 很受欢迎。

      【讨论】:

      • NHibernate 与 Database-First 设计以及 Domain-To-Model 工具一起使用。从历史上看,它始终是模型优先的,但同样,现在存在从数据库生成(和更新)模型的工具。
      【解决方案8】:

      我们在工作中使用 LLBLGen,但它受到了谴责——因为我们有多个相似的模式,但是您需要为每个模式拥有不同的 DLL/类库,这意味着编写可以针对任何模式的代码变得很烦人.

      当然,这是一个不寻常的环境,所以它可能不适用于你。

      【讨论】:

      • 您可以使用架构名称覆盖,因此您可以使用 1 个代码库定位类似的架构。这可以在应用程序的配置文件中完成,也可以在运行时通过调用 DataAccessAdapter 来完成。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      相关资源
      最近更新 更多