这是一个非常理论和抽象的问题:面向服务的架构 (SOA) 与基于组件的方法有何不同?SOA 的概念是对基于组件的方法的扩展吗?
你怎么认为?也许你知道任何涵盖这个主题的好论文?
这是一个非常理论和抽象的问题:面向服务的架构 (SOA) 与基于组件的方法有何不同?SOA 的概念是对基于组件的方法的扩展吗?
你怎么认为?也许你知道任何涵盖这个主题的好论文?
在本文中,作者将基于组件的开发视为对 SOA 的支持——最终,您的 SOA 需要实现服务,并且您将组件设计为提供实现的可交付成果。一些技能是正确获得组件的粒度和内聚性。
我相信这个观点是对今天 SOA 实际完成方式的合理描述。对我来说,关键是你首先关注服务,你需要在商业意义上做些什么,然后才是组件设计。[这是一篇关于识别服务的文章。免责声明:我是 IBM 人,这些文章是同事写的。]
但是,如果您倒计时,我想您会发现基于组件的开发是一种早于 SOA 的方法,并且与 SOA 有许多相同的目标。我认为 SOA 只是营销炒作,在旧概念上贴上新标签的观点是过度愤世嫉俗的。然而,CBD 和 SOA 之间存在相当大的重叠。我只是将 SOA 视为迄今为止我们在如何进行集成方面拥有的最佳集体智慧,毫无疑问,随着我们学习更多新技术,将会出现更多新技术,直到整个工具包再次获得新名称。
我个人的看法是,SOA 之所以有动力,是因为出现了一组技术,这些技术允许组织内的不同技术团队(例如,IBM 基地和微软基地)构建可以使用彼此服务的组件。换句话说,在如何做组件方面出现了一定程度的成熟度,因此新标签 (SOA) 很有吸引力。
这两个概念非常正交,既不互补也不相互矛盾。如果你威胁要把生锈的叉子插进我的眼睛并强迫我概括,我会说基于组件的开发是一种建模和组装特定软件的技术,而 SOA 是一种组织独立系统的技术,所以他们可以互相交谈。
就像我说的那样,粗鲁的概括,但我只给你一个更具体的问题:)
有人可能会说 SOA 是一种高级形式的基于组件的开发,其中组件已被转换为称为服务的可重用功能块。
基于组件的开发需要一个代码片段存储库(有时是完整的对象堆栈),通常采用一种代码语法。例如,为了在其他任何事情上有用,这些片段需要通过 VB6 和 VC++ 之间的公共接口(例如 windows API 或 COM、COM+ 等)进行移植或调用。因此VB6可以使用和调用VC++函数。因此,组件重用有时需要大量的重构才能重用,这是违反直觉的。还有早晚绑定的问题。存储库组件仍然需要构建和部署为代码库的功能部分才能使用。代码在添加到存储库之前应该已经过单元测试,但仍需要集成测试以确认功能。你' d 还必须构造正确的参数才能“跨越对象接口”。同样,这通常需要包装器代码。
这些代码存储库可能不包含真正跨平台的所有内容。当问题跨域分割时,通常需要平台独立性,尤其是在集成系统中。该接口包含在构建和部署的软件中,而不是实际的功能代码中。
你在两者之间缺少的是一个框架。SOA 不是 CBDv2 也不是它的扩展,你必须通过服务实现的框架。框架也不是一个新概念。
CBD 和 SOA 最终都促进了代码重用。CBD 的范围通常比 SOA 更窄!SOA 需要一个有效的框架,而 CBD 不需要。CBD 与其开发语言和目标平台相耦合。