有很多的兴趣 服务为导向的建筑 (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情况下的业务逻辑(和实体的认识,由于Email模式)被烤成的 Account 类。在《奥氏法案》的情况 Account 对象是真的只是一个结构,因为所有的业务规则被埋葬在该服务。

我可以拥有丰富、功能类和可重复使用的服务在同一时间?

有帮助吗?

解决方案

我真的觉得SOA是唯一有用的,为外部的接口(一般说来,那些公司外部的),即使在那时,只有在案件当性并不重要,你不需要下令递送的邮件。

有鉴于此,我认为他们可以共存。保持你的应用程序的工作与通信的使用面向对象的理念,并且只有当外部接口(第三方)的需要,让他们通过SOA(这是不必要的,但它是一种方式)。

我真的觉得SOA是过度使用,或者至少结构与SOA是得到提出过于频繁。我真的不知道的任何大的系统,这些系统使用SOA在内部,而且我怀疑他们可能。这似乎是更多的事情,你可能只是用来做恶搞或简单的天气预测类型的请求,不建立严重的系统上。

其他提示

我的意见是,SOA可能是有用的,在宏观一级,但每个服务很可能仍将是大到足以需要几个内部组成。内部组件可以从中受益OO架构。

SOA API的定义应该更仔细于内部Api,因为它是一个外部API。数据类型,通过在这一级别应尽可能简单,没有内部的逻辑。如果有一些逻辑的所有数据的类型(例如验证),应该优选的一个服务在运行逻辑上的数据类型。

SOA是一个良好架构之间进行通信的系统或应用。

每个应用程序界定了"服务"界面,其中包括要求它将处理和resposes预期。

关键点在这里是很好的定义服务,以及定义的接口。怎么你服务的实际implemnted是irrelevent尽SOA是关注。

所以你是自由的实现你的服务使用的所有最新和最伟大的OO列表琥珀色美容法开发的,或任何其他methodoligy为你的作品。(我已经看到的极端情况下的"服务"是implmented通过实际的人进入数据在屏幕上但一切仍文书SOA!).

我认为,这是一种误解为对象的取向。甚至中爪哇的方法一般不一部分 对象 但是他们的 (甚至这种"成员"是没有必要为对象的取向,但这是一个不同的主题).一类是只是一个描述的一类,因此这真的是一个程序的一部分,没有数据。

SOA和OO不互相矛盾。一个服务可以接受的数据,将它们组织为对象在内部,对他们的工作,并最终给他们的回任何形式是需要的。

我听说詹姆斯*戈斯林说,一个可以实现SOA在COBOL。

如果你读的艾伦*凯自己的说明来源的面向对象的,它描述了一堆小小的电脑互动来执行一些有用的东西。

考虑本说明:

X应该由Ys。每个Y应该负责的一个单一的概念,并且应当可描述的完全方面的接口。一个Y可以要求另一个Y做一些通过交换的信息(按他们的指定的接口).

在某些情况下,一个X可以通过Z,其它管理根据其接口。没有X被允许直接访问的另一个X的Z。

我认为,以下替换是可能的:

Term      Programing       Architecture
----    ---------------    ------------
  X         Program           System
  Y         Objects          Services
  Z      Data structure      Database
----    ---------------    ------------
result        OOP              SOA

如果你认为主要是在条款的封装,信息隐藏的、松散耦合、和黑盒子接口,有相当多的相似性。如果你陷入多态性、继承等。你是想编程和实施,而不是建筑,恕我直言。

如果你能让你的服务要记住的国家,然后他们就可以被认为是大的物体有可能缓慢调用的时间。

如果他们是不允许的保留的状态然后他们只是因为你说-算数据。

这听起来像你可分割你的系统达成过多的服务。你有书面的,相互商定的标准对于如何划分的?

采用SOA不会 意思是 扔掉你所有的对象 但是有关的分系统成大可重复使用的区块。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top