软件工程导论中的 内聚与 耦合 内聚

怎样才能做到:高内聚低耦合
[问题点数:100分,结帖人hanbaojun]
怎样才能做到:高内聚低耦合
[问题点数:100分,结帖人hanbaojun]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2002年 总版技术专家分年内排行榜第一
2003年 总版技术专家分年内排行榜第二
本帖子已过去太久远了,不再提供回复功能。顺序内聚_百度百科
关闭特色百科用户权威合作手机百科
收藏 查看&顺序内聚本词条缺少信息栏、名片图,补充相关内容使词条更完整,还能快速升级,赶紧来吧!
顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须,前一功能元素的输出就是下一功能元素的输入。
正如同(coupling)一样,内聚(cohesion)对于与服务来说仍然重要。例如,如果你仅仅因为一组方法具有相似的实现就把它们放在一个对象里,那么你将犯“创建逻辑内聚对象(logically cohesive object)”的错误。考虑到向“新的”计算方式的转变常常伴随着对旧的方式的直接批评,所以如今对SOA的关注引起对的激烈反对并不出乎意料。不幸的是,其实许多适合系统的质量标准也同样适用于分布式服务与SOA。因此,有些人为了顺应潮流而被迫忽略它们是十分遗憾的。不过,也许不要紧,因为我们可以直接追溯到对象之前的时期,搞清楚像耦合和内聚这样的度量标准,并重新运用它们。这在近年来也许已经不怎么被注意了,直到Jim Webber最近写了一篇关于“贫血的服务模型(Anemic Service Model)”的文章。Jim简述了过去对良好的软件工程实践的讨论,他说的一些话跟 Steve 先前的非常相似:
有些软件是、的。这意味着,尽管它经过合理的设计,但由于存在紧密的相互依赖关系,所以不容易被修改。那是很糟糕的;而且很不幸地是,这在企业应用中很常见。还记得若干年前的确给你留下深刻印象,但如今维护起来却令你痛苦不堪的软件吗?原因就在于它是的。
、低内聚的软件是另一种糟糕的软件。这意味着模块之间少有明显的相互依赖;但是,没有一个模块是在系统中某方面处于权威地位的。这进而造成需用“散弹法(scattergun approach)”来解决持续的系统演化,因为即使很小的改动也会波及多个组件或系统。也就是我们今天所认识到的SOA。低内聚导致难以阅读代码、维护、测试和复用。
接着,该文继续讨论目前的SOA思想完全与这一状况相悖:
一方面,我们倾向于(而且确实在SOA那帮人的怂恿之下)认为这种架构是非常符合目标的,因为它是极度的。既然每个组件或服务都与其他别的组件或服务没有耦合,那么应该可以像玩乐高积木那样、按无数种方式来组织或调整它们。书上教我们用一组基础服务来构建“业务服务(business services)”。事实上,我们甚至可以用BPM工具“选择-点击”来轻而易举地达到那个目标,从而避免了如开发者与一直伴随左右的变更管理这样的开销。是吗?
不。实际上根本不是。[……] 这是对架构的幻想,在真实世界的企业系统里是不可能的。实际上,一个不解决业务问题的服务根本没有资格进入SOA。现在这篇文章吸引了不少值得注意的评论。然而,由这篇文章引发的实质性争论已蔓延到了别处, 尤其是Jean-Jacques Dubray的回应:
嗯,有人一直试图单枪匹马地用一种“面向其他架构(Something Else Oriented Architecture)”来推翻SOA,那就是MEST支持者Jim Webber。[……] 我觉得他这篇文章纯属误导。也许有些地方我理解不当,但Jim说的是内聚与的关系。[……] 在我看来,内聚(cohesion)听起来是个不错的工程原则,它很像“依赖结构矩阵(Dependency Structure Matrix)”。[……] (loose coupling)的目标正是降低内聚。一个互联的(connected)系统是不存在内聚的。内聚和耦合不可能同时存在。即使在英语里,把这两个词联系在一起也是很糟糕的。
的目标,是使得在不同时间、用不同技术、具有不同安全模型的代码片断可以一同工作。
SOA是要远离内聚的系统、转而支持更广泛的重用场景。多层内聚的系统提供“多层”(像库一样的)重用模型:上层可以重用下层。不幸的是,它强迫我们以一种与理想的不兼容的方式来创建系统。问题出在内聚,而解决之道在于。Jim,你真以为人们都在试图“把东西放在一个模块里”吗?
Jean-Jacques提出,尽管内聚是一个被充分理解的原则,不过它跟“当代”SOA并不相关:
有些人老拿他们5年前形成的观念来看“SOA”,而那只是被他们自己错误理解的SOA,这种情形让我觉得越来越不愉快。Jim所展现的是一幅陈旧的、并不能代表2008年的SOA的情景。之后,Jean-Jacques 又继续讨论了Steve最初那篇文章:
……对于服务的接口与实现设计,内聚(cohesion)完全是一种没有必要的约束,它实际上会降低一个服务的重用程度、并减弱它参与不同组装的能力。也许我们该对现代的概念作一些了解了,比如:双向接口(bi-directional interfaces)、组装(assemblies)、编制语言(orchestration languages)、可扩展及语义可达的(extensible and semantically accessible data structures)。过去设计出那些古老的技巧,就是因为编程模型里没有这些概念。
新手上路我有疑问投诉建议参考资料 查看软件工程部分备选题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
49页免费8页免费25页免费12页免费36页2下载券90页2下载券98页1下载券21页1下载券5页免费10页2下载券
喜欢此文档的还喜欢44页2下载券4页免费9页免费25页5下载券6页免费
软件工程部分备选题|
阅读已结束,如果下载本文需要使用
1下载券  
想免费下载本文?
文档免下载券下载特权 全站付费文档8折起 千本精品电子书免费看
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢软件工程 什么叫高内聚 低耦合.
这是软件工程中的观念 率先要懂得一个软件是由多个子过程组装而成, 而一个过程由多个模块(措施)构成! 而内聚即便指过程内的各个模块之间的联系紧凑程度, 偶合即便各个表面过程(子过程)之间的联系紧凑程度. 因而很易打听,为什么要高内聚?模块之间的联系越紧凑,出错就越少!低偶合?子过程间的联系越混杂,就会发生更多的鬼没神出的讹谬!会给尔后的维护工作带来许多繁琐!会意:收缩耦合率先要从推断什么是耦合开始,这个问题我们不会有太多的抵触。我们都该当打听耦合不是不可避免的,因而全面的去耦合大约就不可能。而切实就任何的利用在切实中,以及在我的认识中都受到其他因素的波及。这也使我们的设计切实上大约就不可能全面的到达去耦合。于是我们能够从职责的细离别端,也即便让职责能够在一个轻便的粒度上,这么这个粒度的职责就总是被调用,而不是去调用旁人然后又被调用这么的互相紧凑关系。同时我们也要当心到去耦合大约就不但是一个存在于面向对象领土的特异观念,而是在任何的措施下都存在的问题。我也要当心到去耦合所要处理的问题是更好的面对改变,可能说是更好的能够被伸展。淡忘这两点,单纯的摸索去耦合是没故含义的。也即便说我们要认识到,万一你的过程需求全面的判定,无须要琢磨改变,你为区耦配合出的努力大约就未曾价值。而且去耦经常还意味着,对于运行功能的减退。而切实上去耦的同经往往可能会带来新的埋伏的耦合。切实上这里还是要得手到你的过程段落的职责是难受很确定的问题。而耦合会带来系统的关系钝化,让你很难确认你的关怀点。这其实也带来了你去耦的难度。而这切实上还是你的系统职责不清稀带来的去耦隐患。你要做的还是确定各个局部的职责。而说到最后,切实上情形极其容易,即便你确定你的系统的职责。这能够用单一职责法定来获得保证,也即便你的过程中一个要素改变的起因,就只能是一个,一个改换只能带来一个直接的收获。任何的去藕无非即便在这个分寸下赴任责和职责的起因以及收获举行细分和组织。你能够把这些讹谬增加到你的代码审查的察看列表(checklist)中,
请各位遵纪守法并注意语言文明耦合与内聚例子_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
53页免费9页免费1页免费9页免费2页免费1页免费2页免费1页免费1页免费
喜欢此文档的还喜欢53页免费2页免费9页免费3页2下载券3页2下载券
耦合与内聚例子|耦​合​与​内​聚​例​子
阅读已结束,如果下载本文需要使用
1下载券  
想免费下载本文?
文档免下载券下载特权 全站付费文档8折起 千本精品电子书免费看
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢}

我要回帖

更多关于 耦合 内聚 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信