题
有很多的兴趣 服务为导向的建筑 (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不会 不 意思是 扔掉你所有的对象 但是有关的分系统成大可重复使用的区块。