NHibernate或FluentNHibernate还是ActiveRecord?

时间:2009-09-24 04:01:49

标签: nhibernate orm activerecord fluent-nhibernate

我正处于将CSharp类映射到数据库表的阶段。在与其他工具进行比较后,我决定使用NHibernate作为我的ORM工具。我之前从未用NHibernate做过一个真正的项目,现在正在考虑映射的替代方案,

ActiveRecord:根据项目的网站,使用ActiveRecord可以大大提高生产力。但是,我不喜欢向我的CSharp类添加属性的想法。毕竟,我的班级不应该对数据库关系有任何了解。通过使用ActiveRecord将我很好地分离的类绑定到ActiveRecord,如果我想在将来切换下划线DAO层实现,给我带来困难。

FluentNHibernate:FluentNhibernate是我开始映射时的第一次尝试。但我对这种方法也有一些问题。 1)我不喜欢编译为二进制文件的映射策略。我希望能够通过修改xml文件来更改映射。 2)FluentNHibernate的成熟度。 NHibernate已经存在了很长时间,并且拥有很多用户,所以我很熟悉它的成熟度。相比之下,FluentNhibernate相对年轻,并没有经过多少用户的测试。即使我可以深入到源头来修复出现的任何问题,但我对触及低级实现的技能感到不自在。 3)FluentNHibernate的文档可用性远远高于NHibernate。当我碰到坚硬的墙壁时,我想有一个地方可以去。

NHibernate:目前,我使用裸Nhibernate xml来进行映射。说实话,使用XML给我带来了巨大的麻烦。从字面上看,我必须避免仅仅扔掉.hbm.xml文件并每天多次获取ActiveRecord或FluentNHibernate的冲动。

所以,这就是我的困境:我是否应该全心全意地去做“让这个该死的东西完成!”;或者,我应该遵循“良好实践指南”来承受痛苦,并在以后相对容易的时间吗?

有任何意见吗?

1 个答案:

答案 0 :(得分:4)

请注意,任何与ORM相关的类都不应被视为“业务对象”类或公开给您的UI。它们应被视为数据层的一部分。这种模式对ActiveRecord来说并不是唯一的。通常,您希望业务层尽可能少地了解其下方有ORM,并且您不希望UI了解您的数据层。您还想考虑DTOs

Fluent NHibernate解决了弱类型XML的问题,这种XML很容易出现重构。

虽然采用像ActiveRecord这样的东西可能会有缺点,但在您的情况下,这似乎是一个合适的解决方案。

使用.hbm.xml文件的最佳理由是,如果要从数据库中生成代码(使用CodeSmith之类的代码)。编写.hbm.xml文件的手很少是最好的选择。