【发布时间】:2011-04-28 12:07:42
【问题描述】:
我正在构建一个系统,该系统将有几个通道为不同的客户端提供数据(MonoDroid、MonoTouch、Asp.Net Mvc、REST API)
我正在尝试采用 SOA 架构,并尝试采用可达性模式的持久性 (http://www.udidahan.com/2009/06/29/dont-create-aggregate-roots/)
我的问题与架构的设计有关。如何最好地将系统拆分为离散的块以从 SOA 中受益。
在我的模型中有一个 SystemImplementation 代表系统本身的安装。还有一个 Account 实体。
我最初设计它的方式是将服务创建为:
- SystemImplementationService - 负责管理与实际安装本身相关的事情,例如品牌、流量记录等
- AccountService - 负责管理用户资产(媒体、联系人网络等)
从逻辑上讲,新用户帐户的注册将发生在 AccountService.RegisterAccount 中,服务可以负责验证新帐户(重复的用户名检查等)、散列密码等
但是,为了通过可访问性实现持久性,我需要将新帐户添加到 SystemImplementation.Accounts 集合中,以便它自动保存在 SystemImplementation 服务中(使用 nhibernate 我可以使用lazy=extra 来确保我添加将新帐户添加到集合中,它不会自动加载所有帐户)
为此,我可能需要在 AccountService 中创建帐户,将未保存的实体传回给客户端,然后让客户端调用 SystemImplementation.AssociateAccountWithSystemImplementation
这样我就不需要从 AccountService 调用 SystemImplementation 服务(这样,如果我错了,请纠正我 - 是不好的做法)
然后我的问题是 - 我是否错误地拆分了系统?如果是这样,我应该如何拆分系统?是否有任何方法来定义系统应该为 SOA 拆分的方式?是否可以从服务中调用 WCF 服务:
AccountService.RegisterAccount --> SystemImplementation.AssociateAccountWithSystemImplementation
我担心我会开始基于一些反模式构建系统,这些反模式稍后会抓住我:)
【问题讨论】:
标签: c# wcf design-patterns architecture soa