[Guideline] DECOUPLE WITH ASSOCIATIONS
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)
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章
-4
30