给定一个(当前)项目,该项目实现了一个2层架构,在典型的generic DAO architecture as pioneered by Bill McCafferty on CodeProject之后有一个分离良好的层上业务层,并在NHibernate in Action的第10章中进行了简要解释。
必须将此项目移动到使用Web服务通过Microsoft CRM作为中间层执行CRUD操作和业务逻辑。 CRM中定义了自定义对象和方法以模拟当前情况。
我认为开始以与以往相同的方式来回移动POCO并不是一个好主意。此外,延迟加载,缓存和并发等功能都必须区别对待。考虑到我们必须尽量减少中间层表示层之间的调用带来另一个挑战。
实施DTO似乎是正确的行动原因,但需要很长的路径(加上团队的学习路径)。我以前做过SOA项目,但现在我正在寻找阻力最小的路径。我们可以继续使用NHibernate,即使直接数据库连接不是一个选项吗?我们是否必须重新考虑.NET 4.0中引入的设计或断开连接的实体?它变得多么无痛?
答案 0 :(得分:2)
在Reflector中查看MS CRM SDK 4.0.12。他们在那里进行了很长的合适的ORM,CRUD和Linq包括。在那里与NH存在许多细微的(并且不那么微妙的)差异,并且它尚未经过插件训练,但至少你可以借用一些想法。
答案 1 :(得分:1)
我们使用XRMLinq - http://www.xrmlinq.com。它构建您的DTO对象,然后您可以使用LINQ语法来查询它们。该框架会自动将您的LINQ查询转换为针对CRM Web服务的FetchXML查询。 DTO对象被创建为部分类,因此您可以添加自己的逻辑,以便在重新生成时继续使用。
另一个提示:尽可能为业务逻辑使用自定义工作流活动。不是直接将逻辑编写到XRMLinq生成的DTO中,而是考虑创建一个自定义工作流活动,该活动将在更新某些字段时触发。这会强制您的业务逻辑运行,即使这些字段在系统中的其他位置更新(而不是通过您的自定义DTO逻辑)。它还为您提供了一个很好的排队系统和故障恢复机制 - 如果您的自定义工作流活动引发异常,工作流将“暂停”,直到您解决问题,此时您可以恢复失败的工作流程。这仅适用于可以异步运行的业务逻辑,但对于同步逻辑,我仍然建议在将逻辑写入DTO之前查看自定义插件。
希望有所帮助!
答案 2 :(得分:0)
以下是一些很好的文章,详细介绍了已经在各种规模的项目上落后的SOA架构,该系列仍然是编写的,我相信它对您有用。
http://hubpages.com/hub/Building-Service-Orientated-Architecture