SOA是一個服務的集合,這些服務事實上是一些為應用程序提供不同功能的類。這些類,或者說這些服務,是應用程序常用的基本構建模塊。服務之間互不關聯,可以獨立操作也可以協作。創建獨立的服務可以提高應用程序的可維護性,因為服務的優化甚至替換是不會影響系統的其他部分的。這種模塊化也促進了各組件之間的松耦合,允許組件更好地復用。(在本章后面的部分還會深入討論“耦合”這個概念。)
通常,服務有兩種類型。
●應用程序無關服務:無關服務在提供服務時不需要了解應用程序的任何內容。沒有針對服務所在的應用程序的特定業務規則,沒有針對特定業務的數據操作,也沒有引用需要這種服務類型知識的外部代碼。
·應用程序無關服務的一個例子是將日志消息寫入文本文件的類。不管應用程序的業務目的是什么,這種類可以應用于任何應用程序。logger類或服務的方法和屬性不隨應用程序改變,所以logger是與應用程序無關的。
·另一個例子是和Facebook交互的類。這種類按一般的方式建立,所以它不做任何修改就可以在其他應用程序中復用。有需要時,任何特定于應用程序的數據都可以傳輸到Facebook服務中去。
·應用程序無關服務也可以是類的集合,比如用戶管理系統。不同的應用程序有相同的用戶和安全信息,這種情況是很常見的。這些信息包括諸如用戶登錄時的用戶名、密碼和用戶登錄時賦予的安全角色。如果這個邏輯能夠廣泛地應用于不同的應用程序,那么它就是應用無關的。
●應用程序特定服務:這些服務需要了解其工作環境中的特定問題域知識。這意味著它們使用應用程序的特定數據,或是需要實現不適用于通用業務程序的規則。這些服務可以在同一公司的其他地方使用,但如果在一個完全不同的環境中,它們就無法使用。
·應用程序特定服務的一個例子是使用特定業務規則的類。假設你正在建設一個銷售管理系統,任何可能超過10萬美元的銷售都必須獲得銷售經理的批準。這就是特定于應用程序的規則,所以所有使用這條規則的類都是特定于應用程序的。
當構建服務時,有可能會做成應用程序無關的,以提高可移植性。我們也會在不同的項目中使用這兩種服務,以進一步確保它們的復用。應用程序無關服務并不普遍,但是引入它們是很有用的。在使用它們時要額外小心,不要和特定于業務的邏輯混在一起。
在后續的幾個小節中,我們將會講述SOA服務使用過程中需要遵循的幾個基本準則。