介面會定義一組由某個分類器來實現的作業。在設計模型中,介面主要用來定義子系統的介面。這不表示類別不能使用它們,不過,對於單一類別而言,定義類別的公用作業通常便已足夠(事實上,就是定義它的「介面」)。對子系統而言,介面很重要,因為它們可讓您將行為的宣告(介面)和行為的實現(子系統內實現介面的特定類別)分開。如此分離之後,開發小組將更能夠獨立處理系統的不同部分,同時仍保留這些不同部分之間精確的「合約」定義。
針對每個子系統,各識別一組候選的介面。
請利用上一步驟所識別的各組協同作業來識別在起始協同作業時「啟動」的責任。之後,便判斷「用戶端」必須提供哪些資訊以及協同作業完成時會傳回什麼資訊來修正這個責任;這幾組資訊會成為輸入和輸出參數的原型,以及子系統將實現之作業的回覆值原型。請利用工作成果:專案特定準則中所定義的命名慣例來定義這個作業的名稱。請重複這個步驟,直到定義好子系統將實現的所有作業為止。
之後,根據相關的責任來分組各項作業。群組最好小一點,因為群組中的作業越少,越容易有一組內聚的共有責任。另外,也請注意重複使用 -
請找出類似性,以便更容易識別出可重複使用的相關功能。不過,這時不要花太多時間來嘗試尋找理想的責任分組;請記住,這只是最初步的分組,在詳述階段中,將反覆進行修正。
尋找介面之間的類似性。
從一組候選的介面中,尋找類似的名稱、類似的責任,以及類似的作業。當許多介面有相同的作業時,請重構介面,將共用作業擷取到新的介面中。請務必查看現有的介面,儘可能重複使用它們。目標是在介面之間移除冗餘作業,同時維護介面的內聚性。這會使介面更容易瞭解,且會隨著時間而發展。
定義介面相依性。
每個介面作業的參數和回覆值都有特定類型:它們必須實現特定介面,或必須是簡式資料類型的實例。當參數是實現特定介面的物件時,請定義介面和它依賴的介面之間的相依性關係。定義介面之間的相依性,會提供非常有用的耦合性資訊給軟體架構師,因為介面相依性會定義設計模型各元素之間的主要相依關係。
將介面對映到子系統。
識別了介面之後,請建立子系統和它所實現的介面之間的實現關聯。從子系統到介面的實現會指出子系統內一或多個實現介面作業的元素。稍後,當設計子系統時,會修正這些子系統到介面的實現,子系統設計師將指定子系統內的哪些特定元素會實現介面的作業。只有子系統設計師能夠見到這些修正的實現;從子系統用戶端的角度來看,只能見到「子系統-介面」實現化。
定義介面所指定的行為。
介面通常會針對實現介面的元素來定義一個隱含的狀態機。如果必須依照特定順序來呼叫介面的各項作業(如必須先開啟資料庫連線,才能使用這個連線),您也應該定義一個狀態機來說明實現介面的任何設計元素必須支援的可公開見到(或推斷)的狀態。這個狀態機可協助介面使用者更充分瞭解介面,且可協助實現介面之元素的設計者提供正確的元素行為。
套裝介面。
介面是軟體架構師所擁有的;介面的變更一律含有架構重要性。如果要管理這一點,介面應該分組成軟體架構師所擁有的一或多個套件。如果每個介面都是由單一子系統來實現,介面就可以放在子系統的相同套件中。如果介面是多個子系統所實現,它們應該放在軟體架構師所擁有的個別套件中。這會使介面的管理和控制,能夠在子系統本身之外個別進行。
目的
|
識別形成系統內各個縫的設計元素(只適用於 RT 設計)。
|
通訊協定類似於事件驅動系統中的介面:它們會定義一組在獨立控制緒之間用來通訊的相符信號,以識別封裝體之間的「合約」。介面主要是用來定義會用到呼叫的函數呼叫模型之同步傳訊,通訊協定主要用來定義會用到基於信號的傳訊之非同步通訊。通訊協定可讓您將行為的宣告(信號集)和行為的實現(子系統內實現介面的元素)分開。如此分離之後,開發小組將更能夠獨立處理系統的不同部分,同時仍保留這些不同部分之間精確的「合約」定義。
針對各個封裝體,識別一組輸入和輸出信號。
請利用先前的步驟所識別的各組協同作業來識別起始協同作業時所「啟動」的責任。之後,便判斷「用戶端」必須提供哪些資訊以及協同作業完成時會傳回什麼資訊來修正這個責任;這幾組資訊會成為封裝體將利用它的一個埠來實現之信號的輸入參數原型。請利用工作成果:專案特定準則中所定義的命名慣例來定義這個信號的名稱。請重複這個步驟,直到定義好封裝體將實現的所有信號為止。
之後,根據相關的責任來分組各個信號。群組最好小一點,因為群組中的信號越少,越容易有一組內聚的共有責任。另外,也請注意重複使用 -
請找出類似性,以便更容易識別出可重複使用的相關功能。不過,這時不要花太多時間來嘗試尋找理想的責任分組;請記住,這只是最初步的分組,在詳述階段中,將反覆進行修正。請提供有意義的通訊協定名稱,這個名稱要能夠說明通訊協定在封裝體協同作業中扮演的角色。
尋找通訊協定之間的類似性。
從一組候選的通訊協定中,尋找類似的名稱、類似的責任,以及類似的信號。當許多通訊協定有相同的信號時,請重構這些通訊協定,將共用信號擷取到新的介面中。請務必查看現有的通訊協定,儘可能重複使用它們。目標是在通訊協定之間移除冗餘信號,同時維護通訊協定的內聚性。這會使通訊協定更容易瞭解,且會隨著時間而發展。
將通訊協定對映到封裝體。 識別通訊協定之後,請在封裝體上,建立用來實現通訊協定的埠。封裝體的埠用來定義封裝體的「介面」,也就是可向封裝體要求的行為。稍後,當設計封裝體時,狀態機會針對封裝體來說明埠所指定的行為。
定義通訊協定所指定的行為。
通訊協定通常會針對實現介面的元素來定義一個隱含的狀態機。如果必須依照特定順序來接收介面的各個輸入信號(如必須先收到「系統備妥」信號,才能收到特定錯誤信號),您也應該定義一個狀態機來說明實現通訊協定的任何設計元素所需支援的可公開見到(或推斷)的狀態。這個狀態機可協助實現通訊協定之封裝體的使用者更充分瞭解它們的行為,且可協助封裝體的設計者提供正確的元素行為。
套裝通訊協定。 通訊協定是軟體架構師所擁有的;通訊協定的變更一律含有架構重要性。如果要管理這一點,通訊協定應該分組成軟體架構師所擁有的一或多個套件。這會使通訊協定的管理和控制,能夠在實現通訊協定的封裝體之外個別進行。
|