1

我们的软件是一个定制的人力资源管理系统 (HRMS),使用 ASP.NET 和 Oracle 作为数据库,现在我们实际上正在努力使其成为支持多个租户拥有自己的数据库的产品。

我们的选择:

  1. 使用 NHibernate 来支持多数据库和 OO 的使用。但是我们关注与 NHibernate 学习曲线和我们面临的任何问题有关的问题。

  2. 制作一个通用的 DAL,它将继续使用存储过程与 Oracle 合作,并使用工具将其转换为其他数据库,例如 SQL Server 或 MySql。必须支持单个脚本的多个依赖于数据库的版本存在相关风险。

  3. 提供软件即服务 (SaaS) 并维护我们开展业务的方式。但是,可能有客户不想要或不信任云或其他 SaaS 业务模型。

考虑到这一点,最好的数据访问层技术是什么?

4

6 回答 6

3

我会说 NHibernate 乍一看令人印象深刻,而且学习起来似乎很复杂。因此,在快速阅读了大约 260 页的介绍文档并坚持我需要在测试应用程序中执行的任务之后,NHibernate 确实是要走的路。如果您对 XML 映射文件不感兴趣,只需使用FluentNHibernate,它允许您使用 OOP 来映射您的业务域对象。

此外,如果您对 NHibernate 并不完全满意并且更喜欢采用另一种方式,Enterprise Library 4.1(2008 年 10 月)可能是一个有用的工具。根据情况,在某些组织中,我选择了 NHibernate - Enterprise Library 的混合方法。Enterprise Library 中的数据访问应用程序块 (DAAB) 非常容易学习,除了您已经知道的内容外,您不需要学习任何内容。您只需要知道使用什么对象从 DatabaseProviderFactory 类创建 DbConnection 以从配置文件中读取,并且您可以指定默认数据库。

至于我的顾虑,我经常同时使用 NHibernate 和 Enterprise Library。例如,DAAB 允许我为每个配置文件指定一个数据库连接,因为我更喜欢每个文件只参数一个连接。这使我不必为根本没有更改的配置部署不必要的配置文件,而只为另一个连接部署新的配置文件。因此,如果您合并一个必须在其他地方连接到另一个数据存储的新模块,您构建您的模块而不关心其余部分,使用您的模块的 DLL 以及这个新的 DAAB 配置文件更新您的软件。

至于 NHibernate,重要的是不要在不再需要 ISessionFactory 时将其删除。实例化成本很高,因此您希望将其保存在内存中。不过,您可以做的是序列化您的配置对象类(因为它是可序列化的),因此您的应用程序只有在您的 NHibernate 配置文件发生更改时才能构建其配置。再说一次,我建议你使用 NHibernate 的默认 hibernate.cfg.xml 配置文件,这样你就不需要在更新到来时一遍又一遍地部署你的 app.config 文件。

我希望这有帮助!如果您需要更多信息,请告诉我。

于 2010-01-29T14:25:07.247 回答
3

我建议您花时间学习 NHibernate,它有许多用于查询和更新数据库的选项,使其与数据库无关,这意味着您只需编写一组脚本,例如 HQL。

我会推荐 Nhibernate by Example,这是一本让你前进的好书。

于 2010-01-26T10:56:07.030 回答
0

Using NHibernate is almost certainly going to be cheaper (from both a development cost and learning curve perspective) than a custom built ORM for a project of any significant size (more than 20 tables?) that needs to support multiple database vendors. I don't know how to respond to item 3 on your list because I don't know how to compare whatever you are doing today to using NHibernate. It's possible that whatever you are doing today is in fact better than NHibernate, but you have not provided enough information in that regard. It's a risky business decision to lock yourself into a specific business model based on a technology decision which could be expensive to undo later.

于 2010-01-26T13:32:47.357 回答
0

我认为这一切都取决于优先事项!

根据我的经验,我总是会考虑系统的任何部分都可以更改的事实,因此至少会始终牢记系统将如何与其他数据库一起工作并继续前进。

清楚地使用您最了解的内容,然后在您有时间和金钱时进行调整/重构。您可以在开发它们时在以后的组件中引入 NHibernate/IOC,然后返回并重构。

于 2010-01-28T13:21:53.253 回答
0

我会选择选项#3,因为这可以让您最早进入市场,并希望开始一个强劲的收入来源。与提议的产品相比,客户将更愿意资助将现有的成功产品转换为独立系统。您还将从真实用户那里获得宝贵的反馈,从而改进产品。您可能会发现没有对独立系统的需求。

如果您是从头开始,我建议您学习 NHibernate。

于 2010-01-26T13:41:45.613 回答
0

我们有一个类似的场景“HRM + ASP.NET + 多数据库支持”,我们选择了 MyGeneration 的 dOOdads 架构,该产品已经发布并且运行良好!

只需在 Google 上搜索 MyGeneration,您就可以开始了!

关于 SaaS:是的,许多客户不会接受在云上存储数据,无论其安全性如何。在市场上享有声誉后,您可以说服其中一些客户。所以在第一阶段的重点是支持“内部部署”作为高优先级和 Saas 作为第二优先级的设计。如果“内部部署”不是一个选项,您最好咨询 SaaS 营销顾问。

于 2010-01-26T10:51:02.643 回答