关于业务组件相关架构的讨论

组件化的业务系统架构观念据说已经提出来20多年了,可是至今没有见到让人信服的组件化业务系统(注:组件化≠模块化).关于业务组件是什么,长什么样子,如何实现,又有什么样的远景?
http://www.po-soft.com/hi/slx/blog/1964
这篇文章很详细的阐述了作者在业务组件的想法,但是社区内对业务组件的关注和讨论还非常少,我希望大家都能说一下自己对业务组件的理解,对于业务组件的发展的一些看法,甚至更想知道这方面的架构和实现的思路。欢迎大家讨论!
[该贴被yongtree于2010-11-12 19:29修改过]

这篇文章写的非常好,很系统,比较全面,拜读了。我谈一点自己的看法。业务组件只是操作级的,不涉及到管理级的报表和复杂查询。应该只是单据级的查询和关联查询。对于组件间的数据交换,我还是倾向于总线方式。通过总线缓存数据,统一单据格式,每个独立的业务组件需要数据时直接到总线去取,组件中的接口只要针对总线设计就可以了,减少了组件间的相互依赖和耦合。BI可以从总线直接提取数据做查询和报表。这只是我的观点,欢迎拍砖。

组件这个问题是复杂些,甚至有人认为和面向对象冲突的,历史上经久不衰的组件好像和面向对象无关,如TCP/IP 等等,组件更多是API形式出现。

组件的高层次探索目前被SOA架构,以及云计算逐步替代,可见“中间件”中相关讨论。

组件是一个很朴实的概念,是元定义,就好比内存、CPU一样不会轻易被谁替代。再将组件比喻成经济活动中的“公司”,公司的组织形式可以采取“事业部制”、“职能制”等,组件的设计也可以采用面向对象或者面向数据结构等方法。公司间的交易是契约制,必须订立经济合同,SOA是保障契约执行的体系,可以是计划经济、社会主义市场经济或者是完全自由的市场经济,SOA不是终极模式,云计算最本质的概念是共享资源,就像很多中小公司,在淘宝或淘宝商城上做买卖,共享了市场、销售、甚至财务等部门,与SOA不一样。对象的概念太细小,组件中包含对象,我们说计算机是由内存、CPU等组件构成,而不是由内存、CPU等对象构成,对象可以继承和直接调用,而内存和CPU确需要用总线来支持。针对管理系统,面向组件是基于系统的集约化的设计方法,面向对象是基于组件(不适合基于系统)的程序设计方法。最劲爆的说法是:SOA死了,组件还活着。

2010年11月22日 10:57 "yongtree"的内容
最劲爆的说法是:SOA死了,组件还活着 ...

确切说:SOA死了,API还活着。只要有语言就有API,所谓组件,这么多年为什么没有发展,问题会不会出在方向上?也许组件本身就是一个伪命题,或许根本无法存在。

另外,组件和框架是什么关系?如果说当初EJB1.x出来时是组件的天下,那么后来就成为Spring等框架为王的时代,OSGI叫喊了那么多年,到现在还无法成为主流。

欢迎探讨。

API是应用程序编程接口(在此我们不特指为函数调用),与服务接口类似,SOA替代API是可以的。语言与库是同体,有语言就有库,库通过API调用。将它们映射到管理系统,组件是库,好的系统是柔性的,不是硬盒,也可组合共享,库的作用在此。组件中需要有业务实体、规则算法、状态及流程编排等领域中可描述的的语义对象来创建模型。SOA比API高阶,如果SOA死了,API就是化石了,反推,SOA是不会死的,只会被新的编程接口模式所替代,组件是活的,是说要关注业务模型的本质,本质没了,系统就死了。

http://www.po-soft.com/hi/slx/blog/1964

最新一篇文章 :

DCI和服务Services (EJB)

文章提到两点对你感兴趣的业务组件课题有帮助:
1.组件概念中的服务是非面向对象的,而DCI中场景更OO;
2.企业可以在建立组件服务库的同时,建立DCI场景库,到底是两个一起建立,还是抛弃传统的服务库,直接建立场景库?

当然,我立场支持后者。

但是因为组件属于技术架构层次,而OO属于面向业务层次,两个水火不容,硬是搞在一起,不匹配阻抗总是不可避免,这也是业务组件吃力不讨好的原因所在。

参考IBM CBM资料

其实,我是赞成企业的业务中存在业务组件的,比如BOM,应该由单独的一个业务组件来完成。业务组件是可以独立发展的,但是对外提供的服务相对稳定,这样就可以使得我们的企业IT架构更具有柔性。

板桥的东西一般很深奥哦,我琢磨良久不敢回复。
MVC、DDD、DCI是OO的一些模式,我想说,组件化模型其实也是一种模式,如果说系统要是OO出来的,其复杂度让任何一种OO模式都显力不从心,我们知道,汽车不是OO出来的,飞机不是OO出来的。但它们可能是CO出来的,故而尝试业务系统(ERP)CO出来,是一种想法,从O->C->S,复杂度是递减的,管理C的容器比管理O的容器也相对简单点,因为C本身是O的S,是可运行的实体。如果再把C看作O的话,MVC模式足矣。"OSGI叫喊了那么多年,到现在还无法成为主流" -- 框架是卖给程序员的,组件是卖给企业的。也许黑洞或反物质本身就是一个伪命题,或许根本无法存在。呵呵,继续。

http://www.po-soft.com/hi/slx/blog/1964

组件,就像COM中的Component,内部可包含较多的类的实例,对外提供若干接口,是以二进制形式存在的一种程序,比API高级(API的概念跟C库函数类似,只是简单的一段可执行代码,背后是一个运行时),组件这个词也比较古老了,到了Java和C时代,组件已经成为默认的开发服务提供方式,组件被实现为二进制,接口为文本描述以供用户参考。SDK的发展:中断调用(汇编)——API(C)——类库(比如MFC,OWL)——组件(COM/Corba)——虚拟机模式(仍然是组件)