2

我正在设计一个 C# 应用程序

  • 演示文稿(网站 + 弹性应用程序)
  • 业务逻辑层(可能是 WCF 以启用多客户端平台)
  • 数据访问层(使用 NHibernate)

我们将把我们的解决方案集成到许多预先存在的客户数据库环境中,我们想在 DAL 中使用 NHibernate。我的同事指出,使用 NHibernate 从客户的数据库(如用户或图像)生成类会导致 BLL 崩溃每次数据库更改时都在我们面前!所以问题是我们如何防止这种情况发生?我们正在考虑使用 AutoMapper 创建业务对象并将 NHibernate 对象映射到这些 BO(嗯,这会使它们成为 DTO 吗?)并防止 dal 更改影响 BLL .. 这是要走的路吗?

谢谢 !

编辑 :

为了更好地理解我们想要实现的目标,您可能需要上下文:我们正在为前端和 C# 构建一个照片存储/共享应用程序,主要用于我们公司,所以我们处理代码和数据库的各个方面。

但是:该产品也可以按层购买,最终已经有一个带有用户表或图像表的数据库。我在这里考虑一个新的潜在客户,他有一个包含几亿行的 Image 表,并且由于表的 ALTERing 太长而不会为我们的业务逻辑添加列。

尽管这是可能的(例如,用户表可以因为较少的行而被修改),但我们在问自己如何处理表结构更改而不影响我们的所有解决方案,每次我们必须从 BLL 集成到层数据库中到 Flex 中的客户端应用程序!

4

2 回答 2

2

根据我的经验,您的业务对象(AKA 域对象)应该在 OO 中建模,以表示您的真实业务实体和第 3 范式的表(这可能会根据您在速度与文件大小之后的设计而改变)

NHibernate 应该使用它的映射文件在您的 BO 和表之间进行映射。

现在你有合法的案例:

  • 您需要添加/删除一列,我们决定删除 addressline4,这将反映您的地址对象的更改,这很好。
  • 您将列移动到更好的位置,我们的 Client 对象包含注释,当前存储在 Contract_Extra 表中,该表将被移动到 Client 表中。在这种情况下,将列移动到更好的位置只会影响映射文件

我怀疑有一个笼统的推理,但是我希望这些例子能让你思考这个问题

我还没有尝试过跨多个数据库的 NH,每个数据库也应该有自己的服务吗?

这里有一些链接

希望这可以帮助

于 2010-10-02T01:22:48.157 回答
0

听起来您想将域模型设计为与数据库无关。我也对拥有可以映射到多个不同数据库模型的中心域模型的最佳方法感兴趣。

您提出的使用代码生成器从每个数据库创建 DTO 的方式可能是一种选择。另一种方法是为每个预先存在的数据库创建自定义 NHibernate 映射。您可能仍然需要使用一些 DTO 来降低某些映射的难度,但它可能会给您更多的控制权。

这些只是一些想法。更有经验的 NHibernate 用户可能会对您的情况有更好的了解。

于 2010-10-01T17:01:06.657 回答