我公司最近对Service-Oriented Architecture(SOA)引起了很多兴趣。每当我尝试看看如何使用它时,我总是会遇到心理障碍。残酷地:

  • 面向对象说:“保持数据和一起处理数据(业务流程)的方法”;
  • 服务导向说:“将业务流程保留在服务中,并将数据传递给它”。

  • 先前开发SOA的尝试最终将面向对象的代码转换为数据结构以及对其进行操作的单独过程(服务),这似乎是倒退了一步。

    我的问题是:什么模式,体系结构,策略等允许SOA和OO协同工作?

    编辑:回答说“面向内部的OO,面向系统边界的SOA”的答案非常有用,但这并不是我要的。

    假设您有一个Account对象,该对象的业务操作称为Merge,将其与另一个帐户结合在一起。典型的面向对象方法如下所示:
    Account mainAccount = database.loadAccount(mainId);
    Account lesserAccount = database.loadAccount(lesserId);
    
    mainAccount.mergeWith(lesserAccount);
    
    mainAccount.save();
    lesserAccount.delete();
    

    而我所见过的SOA等效项如下所示:
    Account mainAccount = accountService.loadAccount(mainId);
    Account lesserAccount = accountService.loadAccount(lesserId);
    
    accountService.merge(mainAccount, lesserAccount);
    // save and delete handled by the service
    

    在OO情况下,业务逻辑(以及归因于ActiveRecord模式的实体意识)被烘焙到Account类中。在SOA情况下,Account对象实际上只是一个结构,因为所有业务规则都埋在服务中。

    我可以同时拥有丰富的功能类和可重用的服务吗?

    最佳答案

    我真的认为SOA仅对外部接口(interface)(通常来说,对公司外部的接口(interface))有用,即使如此,仅在性能并不十分重要的情况下,您也不需要按顺序传递消息。

    有鉴于此,我认为它们可以共存。使用OO原理保持应用程序正常工作和通信,并且仅当需要外部接口(interface)(与第三方)时,才通过SOA公开它们(这不是必需的,但这是一种方法)。

    我真的觉得SOA被过度使用了,或者至少使用SOA的体系结构提出得太频繁了。我真的不知道任何内部使用SOA的大型系统,我怀疑它们是否可以使用。您似乎可能只是在做混搭或简单的天气预报类型请求而已,而不是在上面构建严肃的系统。

    关于oop - 服务导向与对象导向-它们可以共存吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/442815/

    10-13 02:19