代码之家  ›  专栏  ›  技术社区  ›  Abel

使用SOA(microsoftcrm)从2层NHibernate迁移到3层NHibernate的推荐方法是什么?

  •  0
  • Abel  · 技术社区  · 14 年前

    给定一个(当前)项目,该项目实现了一个两层体系结构,其中一层业务层按照典型的 generic DAO architecture as pioneered by Bill McCafferty on CodeProject 并在NHibernate的第10章中作了简要说明。

    必须将此项目移动到使用web服务作为中间层的Microsoft CRM来执行CRUD操作和业务逻辑。在CRM中定义自定义对象和方法以模拟当前情况。

    我不认为这是一个好主意,开始来回移动POCO的一样,我们过去做的。另外,延迟加载、缓存和并发等特性都必须区别对待。考虑到我们必须最小化中间层和表示层之间的调用,这带来了另一个挑战。

    实现DTO似乎是正确的行动原因,但需要一条漫长的道路(加上团队的学习道路)。我以前做过SOA项目,但现在我正在寻找阻力最小的路径。我们是否可以继续使用NHibernate,即使直接DB连接将不是一个选项?我们是否必须重新考虑设计,或者在.NET4.0中引入不连接的实体,也许是一种选择?它能变得无痛吗?

    3 回复  |  直到 13 年前
        1
  •  1
  •   Josh Painter    14 年前

    我们使用XRMLinq- http://www.xrmlinq.com

    另一个技巧:尽可能为业务逻辑使用自定义工作流活动。与其直接将逻辑写入XRMLinq生成的DTO中,不如考虑创建一个自定义工作流活动,在某些字段更新时触发该活动。这迫使您的业务逻辑运行,即使这些字段在系统中的其他地方得到更新(而不是通过您的自定义DTO逻辑)。它还为您提供了一个很好的排队系统和故障回复机制—如果您的自定义工作流活动引发异常,则工作流将“暂停”,直到您解决问题为止,此时您可以恢复失败的工作流。显然,这只适用于可以异步运行的业务逻辑,但对于同步逻辑,我仍然建议在将逻辑写入DTO之前查看自定义插件。

    希望有帮助!

        2
  •  2
  •   arch    14 年前

    请看一下Reflector中的MSCRMSDK4.0.12。他们走了很长的路找到了一个合适的ORM,包括CRUD和Linq。NH与NH有很多细微的差别,它还没有经过插件培训,但至少你可以借鉴一些想法。

        3
  •  0
  •   MetalLemon    14 年前

    这里有一些很好的文章,详细介绍了一个SOA体系结构,这个体系结构已经在各种规模的项目上得到了研究,这个系列仍然在编写中,我相信它会对您有所帮助。

    http://hubpages.com/hub/Building-Service-Orientated-Architecture