- 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ù)之間的交互沒有影響。
- 深入理解Bootstrap
- Design Principles for Process:driven Architectures Using Oracle BPM and SOA Suite 12c
- Instant Zepto.js
- Java程序員面試算法寶典
- Data Analysis with IBM SPSS Statistics
- Java深入解析:透析Java本質(zhì)的36個(gè)話題
- PySide GUI Application Development(Second Edition)
- Learning Salesforce Einstein
- Visual C++開發(fā)入行真功夫
- Learning Hadoop 2
- Flask Web開發(fā):基于Python的Web應(yīng)用開發(fā)實(shí)戰(zhàn)(第2版)
- 3D Printing Designs:The Sun Puzzle
- Access 2016數(shù)據(jù)庫應(yīng)用與開發(fā):實(shí)戰(zhàn)從入門到精通(視頻教學(xué)版)
- 面向?qū)ο蠓治雠c設(shè)計(jì)(第3版)
- The Java Workshop