GRASP – Creator

Creator là một phương pháp xác định việc giao responsibility cho một class B để tạo ra instance của class A. Để xác định điều này, ta dựa vào một trong các điều kiện sau:
– B kết hợp với A. (Ví dụ B là tổ hợp của nhiều thành phần con và A là một thành phần trong đó)
– B chứa A. (A là một property của B)
– B lưu trữ các instance của A. (B có một list của A)
– B dùng A rất mật thiết (A đóng vai trò là nhân tố chính trong hoạt động của B)
– B có dữ liệu khởi tạo được dùng làm các input cho A, khi A được tạo ra
Nếu một trong các điều kiện trên thỏa thì B là một creator của các object kiểu A. Nghĩa là B sẽ có nhiệm vụ tạo ra A. Nếu có nhiều hơn 1 class thỏa các điều kiện trên đối với A, ta gán quyền tạo A cho class B nào chứa A hoặc kết hợp với A.
Các bước áp dụng:
Bước 1: Nhìn vào trong domain model hay design model và đặt câu hỏi class nào sẽ có nhiệm vụ tạo ra các class này?
Bước 2: Đối với mỗi class A cần tìm class khởi tạo, tìm các class B liên quan với A theo như một trong các điều kiện đã nêu trên
Bước 3: Gán responsibility khởi tạo cho class B
Ví dụ: Giả sử ta có một design model cho trò chơi Cờ Cá Ngựa như sau:
Trong đó Board là bàn cờ và Square là các ô cờ. Ta áp dụng theo từng bước trên chỉ dẫn như sau:
Bước 1: Câu hỏi đặt ra là class nào trong các class ở diagram trên là class khởi tạo của Board(Bàn cờ)?
Bước 2: Ta nhìn vào các mỗi liên quan với class Board, sẽ thấy Board được kết hợp với Game. Như vậy Game sẽ là lớp khởi tạo của Board
Bước 3: Gán nhiệm vụ khởi tạo bàn cờ cho class Game bằng cách thêm vào method CreateBoard() cho class Game và update lại diagram.
Áp dụng tương tự ta cũng sẽ có Board sẽ là class khởi tạo cho Square.
 
Đây là một pattern khá đơn giản nhưng sử dụng rất nhiều trong suốt quá trình design. Các quan hệ để dựa vào đó xác định bạn cần nhớ đó là: Kết hợp (aggregate), Chứa (contains), và lưu trữ (records). Với sự hỗ trợ từ Low Coupling, pattern này làm việc maintenance sẽ dễ dàng hơn.
No Comments

Post A Comment