我正在转向一个使用SOA和WCF实现解决方案的新团队。这些服务都是非常垂直的,例如:CustomerService,AddressService,AccountService等。要返回完全填充的对象,服务可以通过wcf端点调用另一个服务。
有一些非常高级别的垂直区域,但在下面它们可以重用许多核心服务逻辑。
以下新架构的有效性如何:
webservices是处理远程调用的薄层;他们严格要求沟通。真正的功能将在一些叫做“业务或域名服务”的东西中实现。
域名服务职责:
这将为我们提供可以在特定WCF和SQL Server实现之外进行测试的域服务。
重复使用不同商业服务的网络服务似乎是最大的收获,但也是最大的潜在陷阱。
有人试过这个并取得了成功吗?有更好的方法吗?
答案 0 :(得分:2)
乍一看,听起来你走进的设计可能是an SOA antipattern identified in this article:一组“聊天服务”,一个作者用来描述......的情况...... >
开发人员通过实现一个实现服务 每个Web服务的数量 传达一小块数据。 同一反模式的另一种味道 是在执行时 服务最终在一个健谈的对话框中 传达微小的片断 信息而不是组成 数据在综合文档中 形式。
作者继续说道:
性能下降且成本高昂 发展是主要后果 这个反模式。另外, 消费者必须付出额外的努力 聚合这些太细粒度的 为实现任何利益而提供的服务 以及如何获得知识 一起使用这些服务。
答案 1 :(得分:0)
这可能是一种有效的方法。更新多项服务的缺陷取决于服务的相关程度。您是否有一个用例,如果客户服务更新并且地址服务不是客户端仍然可以工作,或者更常见的是所有服务由同一客户端使用,因此应该一起更新。请记住,只有在WSDL更改而不是实现时,服务才会更改。如果您设法不更改前端服务的DataContracts和OperationContracts,则无后顾之忧。
您可以调查的一种方法是为您的域服务使用进程内WCF服务。或者,前端Web服务可以在单独的y分层程序集中使用域管理器/引擎,而这些程序集又使用存储库。对于可实现mocakble和单元可测试的域实体,您可以拥有粗粒度的Web服务类实现和细粒度管理器。