谈组件识别和划分

标签: 随笔文章 | 发表时间:2014-04-12 22:49 | 作者:人月神话
出处:http://blog.sina.com.cn/cmmi
在SOA组件化和服务化架构下,最重要的还是前期的组件识别和划分,服务识别。对于组件划分而言最简单的目标就是要实现组件本身的搞内聚和松耦合特性,如果最终划分出来的组件之间存在大量的服务交互,那么即使使用了SOA化服务架构仍然是属于严重的紧耦合而没有达到目标。

对于组件的划分前面已经有文章专门谈到了需要从企业架构规划和分析的思路入手,基于端到端的流程建模,流程和业务功能分析,数据架构和数据分析,业务功能和数据的CRUD矩阵分析来最终确定究竟哪些功能适合最终聚合在一个业务组件里面并朝外提供服务能力。在这里其实是没有类似方程求解一样的绝对化的方法来解决识别识别和划分的问题,但是通过组件初步划分后对跨组件的业务流程协同分析和组件集成架构分析,可以反复迭代最终得到一个比较满意的组件划分。

下面就组件识别和划分的一些关键点再展开进行一些定性方法的描述。

要注意在最终组件化架构下,所有的持久化数据库表必须归属到一个特定的组件,在这里基本的原则是需要将涉及到数据新增类的操作全部划归到同一个组件,包括数据表全属性字段的变更类操作全部划归到同一个组件。而企业组件仅仅是涉及到变更这种基础数据的个别属性或状态信息。拿资产管理系统举例来说,资产新增和变更操作需要属于同一个组件,对于资产调拨,资产废弃等业务可用划归到不同的组件因为只操作到资产的个别状态属性。从业务功能和数据的CRUD矩阵分析也基本可以得到类似结论。

组件划分的粗则管控粒度弱,SOA系统内组件化的思路无法贯彻,组件划分的太细又导致大量的后续组件集成和管理的复杂度,组件划分的粒度始终都是在组件划分中最让人头疼的问题。在这里给出两个重要的思路,一个是根据业务本身的生命周期大阶段来划分组件,来采购类业务来说,可以分为大的采购计划和需求,采购策略,合同管理,采购实施等大的阶段,这个就是大的可参考组件粒度,同时让每个组件都有明确的业务含义和价值;第二个方法是多参考企业已有的职能部门划分,职能部门划分为哪些部门哪些科室本身也是考虑了业务协同中的高内聚和松耦合,完全可以作为业务组件划分的参考。再次对于大多数企业可以参考标准的业界ERP系统的模块划分方式,这些模块划分可以大致对应到组件划分可行的粒度,但是对于很多大型集团型企业而言,很多时候模块是对应到业务系统粒度。

对于组件的划分可以由粗到细逐步的划分下去,但是划分到一定的度时候就应该不再拆分。这个度涉及到三个影响因子之间的关系,一个是实际的数据库表或用技术类数据衡量,一个是业务功能点的数量,然后是划分完成后的所有组件暴露的服务总量。这三个因子间应该有一个关系,即划分的越细服务总量增加的越多,而数据对象和业务功能数量并没增加,那么超过一个阀值的时候就不应该再细分了。(这个后续我会根据实践情况来详细阐述和量化这个评估方法)。

对于一个组件是否可以拆分为两个组件,这个看起来评估会更加简单,即两个组件间交互的服务接口数量应该小于两个组件中实际逻辑方法数量的5%或者说更下。而我们在实践过程中往往看到的是两个组件超过30%以上的方法都在通过接口方式暴露,而被人为拆分为两个组件增加了系统集成的复杂度。

组件的划分和系统功能一级菜单往往也没有必然的对应关系,还是以刚才资产管理的例子来说,在系统本身的功能菜单结构上可以看到资产新增和资产统计分析是两个独立的一级菜单,但是实际情况往往是这两个大一级菜单应该划归到同一个组件能力。毕竟对于组件统计分析往往是基于底层资产存量数据进行的,存在紧耦合关系。

在基于SOA组件化架构设计下,我们一直再强调SID共享数据库和领域服务层,这个也是组件后续划分的一个基础前提。实际上当分析出大量共性能力下沉到共享领域服务层后,剩余的业务功能间往往并不再有太强的交互集成和耦合关系,而上层的业务功能组件和底层共享基础能力组件间强耦合应该是允许的一种模式。在以数据为核心的应用中这个是无法避免的一个问题。

在SOA中的业务组件一定是需要实现一个独立的业务价值单元,具备高内聚特性,即输入简单,经过一系列内部处理后形成一个简单的输出结果。如采购管理中招投标可以独立为一个组件,这个组件本身接收招投标需求,输出招投标结果,具备完整的独立自治能力,这种高自治的组件也为组件后续的灵活装配奠定了基础。组件在业务阶段重点是体现独立的业务价值,所有也叫为业务组件。组件到了分析设计阶段时候,重点则是本身需求,设计,开发测试,部署和运维管控的独立性,这些技术特征具备才可能使组件本身严格独立。

  青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟!!   你不得不信的星座秘密

相关 [随笔文章 ] 推荐:

在路上

- Alex Yu - 人月神话的BLOG
那一天,我不得已上路,为不安分的心,为自尊的生存,为自我的证明. 路上的心酸,已融进我的眼睛,心灵的困境,已化作我的坚定. 在这里想讲一个真实的创业团队的故事,是上个周末我和这个公司老总聊天得知的一些信息,这些信息基本完全真实,老总是原来我部门的一个产总,另外一个项目经理是我原来科室的骨干,可以间接算我的师傅.

谈工作型PPT的制作

- Ivan - 人月神话的BLOG
首先要明确是做哪方面的PPT,根据目标进行破题,破题后形成大致的框架结构,支持PPT的一级和二级目录. 工作中常见的PPT包括方案类的PPT,工作总结类的PPT,项目汇报类的PPT,专题培训类的PPT. 破了这个再来考虑传递的东西应该是如何一步步传递,传递的结构应该如何. 方案类的PPT可以延续IT咨询或问题分析和解决的标准思路,即问题定义,问题分析,解决方法,初步验证.

理想和现实

- pu - 人月神话的BLOG
周末在网上看了电影《老男孩》,最先想到的就是理想和现实. 读书的时候估计每个人都写过《我的理想》,那时候写的最多的估计就是老师,工程师,科学家,医生之类. 要么是灵魂的工程师,要么是无私奉献的白衣战士,或者是保卫边疆,再者是发明创造. 很美好,也很符合主旋律,可是真正搞清楚为什么的又有几个呢. 写都能够写,真正的感兴趣又作为自己毕生追求的又有几个呢.

工作十年,写博五年

- 旭斌 - 人月神话的BLOG
今天比较特殊,是我工作十年和写博客五年的一个纪念日. 最近工作事情繁多,经常出现思维和注意力无法常时间集中的情况,如果按五年一个周期来计算,那到今年已经走完两个周期,又是需要好好进行思考和总结的时候. 很多时候确实很忙,但是很忙的时候最怕的又恰恰是忙的来思考的时间都没有,或者是念头一闪而过又无法深入进行思考.

再谈问题分析和解决思路

- Typhoon - 人月神话的BLOG
如果从问题层面来将工作中的能力,那么一个是独立解决问题的能力,一个是自己提出假设创造问题自己解决的能力. 前者足以应对复杂多变的内外环境,后者足以提出有价值的创新. 而独立解决问题的本身又包括两块,一个是针对问题现象提出应急解决方法,一个是针对问题根源提出的风险管理和预警机制. 问题分析和解决本身就应该是一种通过迭代不断收敛的过程,因此根源分析和机制建立就显得更加重要.

为什么做不出好产品(2)

- zhoujg - 人月神话的BLOG
一个好产品必须是可用加可行,可用代表会产生价值,可行代表可以实现. 一个软件产品要成功最终的衡量标准还是用户的使用和喜爱程度. 用户经常会主动想起来要用你的软件,即成功一半,用户在用的过程中感觉很易用,即成功了一大半. 在这里我们不讨论赢利模式的问题. 现在有两组人,一组是技能全部达标但是个性突出不喜欢受太多约束的人;一组是技能不达标,工作态度都挺好的人.

微博点滴整理(3)

- Ranagerol - 人月神话的BLOG
经验说:一见钟情是因为他/她的面容、气质一下子牢牢攥住了我的心. 实验说:喜欢上一个人仅仅是因为他/她长得很像我们生命中重要的某人. 有教养的头脑的第一个标志就是善于提问. 好问的人,只做了五分种的愚人;耻于发问的人,终身为愚人. 一个人经验的积累或解决问题的能力,不是其穷举式的定义和分析问题的能力,而是提出精准假设的能力.

集成测试-意义和方法

- - 人月神话的BLOG
集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题. 如数据穿过接口时可能丢失;一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等. 集成测试是单元测试的逻辑扩展.

再谈企业2.0的核心逻辑

- - 人月神话的BLOG
对于企业2.0的三重境界,宝明有一篇文章做了详细的阐述 http://www.huohua.me/view.php?id=46,其中分为三个重要的阶段:. 社会化社区:形成知识社区和各种社区的进一步融合,消灭传统知识社区的孤岛. 社会化使能:挖掘知识社区能力,也挖掘业务系统能力,并进行进一步的融合.

再谈IT规划的核心逻辑

- - 人月神话的BLOG
前面我写文章谈过IT咨询规划的核心逻辑,说到了IT规划本身就是一个问题定义,问题分析和解决的过程. 是一个通过现状分析,了解差距,明确目标,达成目标的目标驱动的过程. 下周再谈下IT战略规划的核心步骤和关注点. 对于IT规划,基本遵循的思路还是从业务到技术,从流程到IT,围绕价值链优化和分析的核心驱动模型.