企業(yè)集成要面臨的一個重要問題就是解耦描滔,盡量限制要集成的各個組件之間的關(guān)聯(lián)性,以防止修改其中一個組件會影響其它的組件,來保證各個組件可以獨立的進(jìn)化。
常見的耦合性:Type-level coupling卵渴、system-level coupling
type-level coupling,在程序中一個明顯的標(biāo)志鲤竹,就是一個類調(diào)用了大量的其他類
system-level coupling浪读,一個系統(tǒng)調(diào)用另一個目標(biāo)系統(tǒng)時,需要知道目標(biāo)系統(tǒng)的詳細(xì)實現(xiàn)才可以調(diào)用就屬于系統(tǒng)間耦合了辛藻,另外碘橘,看書里面的意思,系統(tǒng)間耦合還包括其他對目標(biāo)系統(tǒng)的假設(shè)吱肌,比如我要調(diào)用一個服務(wù)時痘拆,必須假設(shè)服務(wù)當(dāng)前可用,就也算是系統(tǒng)間耦合岩榆,這個是不是有點過分了。
Dependency Injection坟瓢,依賴注入解耦type-level coupling
Event-driven architecture勇边,在該結(jié)構(gòu)中,復(fù)雜的程序被拆分成多個組件折联,各組件之間通過事件進(jìn)行交互
Synchronous ?communication粒褒,在同步通信中,一個組件在向目標(biāo)系統(tǒng)發(fā)送請求后诚镰,就會一直等待直到目標(biāo)系統(tǒng)發(fā)送回復(fù)才接著往下運行奕坟。
asynchronous Communication祥款,在異步通信中,一個組件在向目標(biāo)系統(tǒng)發(fā)送請求后月杉,不用等待目標(biāo)系統(tǒng)發(fā)送回復(fù)刃跛,它可以接著往下運行。
enterprise integration styles:
文件傳輸:兩個系統(tǒng)生成文件苛萎,文件的有效負(fù)載就是由另一個系統(tǒng)處理的消息桨昙。該類風(fēng)格的例子之一是針對文件輪詢目錄或FTP目錄,并處理該文件腌歉。
共享數(shù)據(jù)庫:兩個系統(tǒng)查詢同一個數(shù)據(jù)庫以獲取要傳遞的數(shù)據(jù)蛙酪。一個例子是你部署了兩個EAR應(yīng)用,它們的實體類(JPA翘盖、Hibernate等)共用同一個表桂塞。
遠(yuǎn)程過程調(diào)用:兩個系統(tǒng)都暴露另一個能調(diào)用的服務(wù)。該類例子有EJB服務(wù)馍驯,或SOAP和REST服務(wù)阁危。
消息:兩個系統(tǒng)連接到一個公用的消息系統(tǒng),互相交換數(shù)據(jù)泥彤,并利用消息調(diào)用行為欲芹。