[Guideline] DECOUPLE WITH ASSOCIATIONS

看板OOAD作者 (!H45)時間17年前 (2007/11/09 16:27), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
Prefactoring 這本書有許多有用的 Guideline 散佈在文章段落之間 使用簡短的幾句話為每個段落做一個總結 我認為這些提示對軟體的分析和設計滿有用的 所以對其中幾句話寫一些簡單的心得獻醜給板友們看看。 _________________________ DECOUPLE WITH ASSOCIATIONS Association classes decouple the two classes being associated. ﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉ ※ 節錄自 <Prefactoring> P.110 心得: 有時候,甚至經常會遇到兩個物件成雙成對出現 成雙成對是指如果存在一個甲物件,那麼可以推論乙物件也存在 這個時候,有些設計師會把甲和乙的屬性和行為寫在一個類別裡面 但是更直觀的作法應該是建立甲類別和乙類別,分別定義甲物件和乙物件的屬性和行為 然後再做一個丙類別,讓這個丙類別擁有甲類別和乙類別兩個成員變數。 這樣一來,甲類別和乙類別的屬性和行為就可以分開運作。 舉個我遇過例子: A* Algorithm 有定義 OpenSet 和 CloseSet 兩個集合 OpenSet, CloseSet 每個元素都是 State 型態 (State 描述一個棋盤中每顆棋子的位置) 如果 State 物件存在,意味著 Path 物件也存在 (Path 描述從一開始到現在的走法) 這個時候,有些設計師會把 State 和 Path 的屬性和行為寫在一個類別裡面 我選擇分別建立 State 和 Path 兩個類別,定義 State 和 Path 它們倆的屬性和行為 然後做一個 StateCollection 當作 OpenSet 的型態,其擁有 State 和 Path 兩個物件 StateCollection 可以叫 Path 找下一個棋局狀態,也可以叫 State 算出棋局的優劣 Path 在找下一個狀態的時候,不需要知道 State 的棋子是象棋、圍棋還是西洋棋 State 在衡量棋局優劣的時候,不需要知道 Path 紀錄的上一步和下一步是什麼狀態 (但是,真的需要的時候就麻煩了......) 這樣一來,State 和 Path 的屬性和行為就可以分開運作。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.247.13 ※ 編輯: H45 來自: 140.116.247.13 (11/09 16:27)
文章代碼(AID): #17D1dQWb (OOAD)
文章代碼(AID): #17D1dQWb (OOAD)