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

具有WCF职责和依赖关系的SOA

  •  0
  • blu  · 技术社区  · 15 年前

    我将进入一个新的团队,这个团队已经实现了一个使用SOA和WCF的解决方案。这些服务都是垂直的,例如:CustomerService、AddressService、AccountService等。为了返回完全填充的对象,服务可以通过WCF端点调用另一个服务。

    有一些非常高级别的垂直区域,但在它们的下面可以重用许多核心服务逻辑。

    以下新架构的有效性如何:

    WebService是处理远程调用的薄层;它们严格用于通信。真正的功能将在我们称之为“业务或域服务”的东西中实现。

    域服务职责:

    • 用于使用基础结构的参考数据访问/存储库接口
    • 调用多个存储库方法以创建完全填充的对象
    • 根据复杂的业务规则处理数据
    • 调用其他域服务(不必调用wcf)

    这将为我们提供可以在特定的WCF和SQL Server实现之外进行测试的域服务。

    重用不同业务服务的Web服务似乎是最大的收益,也是最大的潜在陷阱。

    • 一方面,逻辑可以被多个服务重用,从而消除了调用Web服务调用Web服务的Web服务。
    • 另一方面,如果有人更改某个程序集,则需要更新多个服务,可能会破坏多个应用程序。

    人们有没有尝试过并取得了成功?有更好的方法吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Jeff Sternal    15 年前

    乍一看,这听起来像是你走进的设计 an SOA antipattern identified in this article :一组“聊天服务”,作者用来描述一种情况,其中…

    开发人员通过实现 每个Web服务的数量 传递一小段数据。 相同反模式的另一种口味 是在实现 服务以聊天结束 沟通 信息而不是组成 综合文档中的数据 形式。

    作者继续:

    性能下降,成本高昂 发展是主要后果 这个反模式的。此外, 消费者必须付出额外的努力 把这些太细的颗粒聚集起来 为实现任何利益而提供的服务 以及如何 一起使用这些服务。

        2
  •  0
  •   softveda    15 年前

    这可能是一种有效的方法。更新多个服务的陷阱取决于这些服务的密切关系。您是否有这样一个用例:如果更新了客户服务,而地址服务不可用,那么客户仍然可以工作,或者更常见的是,所有服务都由同一个客户机使用,因此应该一起更新。请记住,只有当WSDL更改而不是实现时,服务才会更改。如果您设法不更改前端服务的数据合同和操作合同,就不必担心了。
    您可能研究的一种方法是为域服务使用进程内WCF服务。或者,前端Web服务可以在单独的、Y层的程序集中使用域管理器/引擎,而这些程序集中又使用存储库。对于可变更和单元可测试的域实体,可以有粗粒度的WebService类实现和细粒度的管理器。