官术网_书友最值得收藏!

  • SOA實(shí)踐
  • 余浩等編著
  • 855字
  • 2018-12-26 17:00:21

1.1.3 服務(wù)之間是松耦合的

耦合是指兩個(gè)事物之間的依賴關(guān)系。如果一個(gè)事物和另外一個(gè)事物依賴很緊密,就稱為緊耦合,反之則稱為松耦合。耦合這個(gè)概念一般和內(nèi)聚聯(lián)系在一起。內(nèi)聚指的是一個(gè)事物內(nèi)部各部分之間的關(guān)聯(lián)程度。聯(lián)系緊密稱為高內(nèi)聚,反之則稱為低內(nèi)聚。一般來說,高內(nèi)聚對(duì)應(yīng)著松耦合,低內(nèi)聚則對(duì)應(yīng)緊耦合。

在計(jì)算機(jī)領(lǐng)域,耦合和內(nèi)聚都屬于衡量軟件質(zhì)量的重要標(biāo)準(zhǔn)。高質(zhì)量的軟件要求模塊是高內(nèi)聚和松耦合的。比如在面向?qū)ο蟮姆椒ㄖ校惖脑O(shè)計(jì)準(zhǔn)則即是如此。對(duì)類的要求為高內(nèi)聚,即一個(gè)類只針對(duì)一項(xiàng)任務(wù),而不是分別完成許多不相關(guān)的任務(wù)。而類之間則要求松耦合,類只暴露必要的信息,滿足類之間的通信要求即可。

服務(wù)的松耦合帶來的好處是不言而喻的。如果兩個(gè)服務(wù)之間是松耦合的,那么它們之間的聯(lián)系很弱,這樣服務(wù)就可以相對(duì)比較容易地變化,而不會(huì)對(duì)其他相關(guān)的服務(wù)帶來太大的影響。如果服務(wù)之間聯(lián)系太過緊密,則容易出現(xiàn)牽一發(fā)而動(dòng)全身,從而導(dǎo)致一個(gè)服務(wù)的變化引起多數(shù)甚至全部服務(wù)的變化,從而使變化實(shí)際上難以實(shí)施,因?yàn)樽兓暮蠊遣豢深A(yù)計(jì)的。

面向?qū)ο蟮姆椒ㄖ须m然通過類的運(yùn)用實(shí)現(xiàn)了一定程度上的松耦合,但是它的一個(gè)主要特征,即繼承,在一定程度上造成了子類和父類之間的緊耦合,父類的改動(dòng)可能對(duì)子類造成不可預(yù)計(jì)的影響。考慮例程1-1所示的例子 [引用3]。

例程1-1 在Java中用ArrayList實(shí)現(xiàn)棧

    class Stack extends ArrayList
    { private int stack_pointer = 0;
    public void push( Object article )
    { add( stack_pointer++, article );
    }
    public Object pop()
    { return remove( --stack_pointer );
    }
    public void push_many( Object[] articles )
    { for( int i = 0; i < articles.length; ++i )
    push( articles[i] );
    }
    }

看上去似乎一切都沒有問題,但是考慮到如果用戶利用繼承直接調(diào)用ArrayList的clear方法,所有的元素都會(huì)被清空,由于基類完全不知棧指針的問題,所以導(dǎo)致該棧對(duì)象處于一種未知的狀態(tài)。由此可見繼承所導(dǎo)致的緊耦合的問題。鑒于此,服務(wù)完全拋棄了繼承的關(guān)系。

服務(wù)之間的松耦合是通過上文介紹的服務(wù)合同來實(shí)現(xiàn)的,即服務(wù)之間只依賴于服務(wù)合同。服務(wù)合同從一個(gè)比較抽象的層次描述了服務(wù)的接口,而并沒有暴露任何關(guān)于服務(wù)內(nèi)部實(shí)現(xiàn)邏輯的信息,因此服務(wù)邏輯的實(shí)現(xiàn)可以隨意改變。只要服務(wù)合同保持不變,服務(wù)邏輯實(shí)現(xiàn)的改變對(duì)服務(wù)之間的交互沒有影響。

主站蜘蛛池模板: 江孜县| 万源市| 闵行区| 宁明县| 潞城市| 天长市| 安义县| 滨海县| 岫岩| 周宁县| 宁阳县| 六安市| 佛冈县| 衡山县| 新郑市| 包头市| 呼伦贝尔市| 瑞安市| 香河县| 云浮市| 石河子市| 沈丘县| 太原市| 汕尾市| 建昌县| 华亭县| 兖州市| 浦东新区| 麻江县| 全南县| 丰宁| 宜城市| 东港市| 四川省| 巨鹿县| 栖霞市| 当雄县| 和龙市| 综艺| 抚顺市| 高密市|