DANH MỤC: PHP TIP

GRASP OO Design toàn tập


Chắc hẳn các bạn đều đã nghe đến lập trình hướng đối tượng OOP - Object Oriented Programming? Thế nhưng liệu các bạn đã design chương trình theo đúng chuẩn? Nếu chưa thì đọc các bài viết trong series này đi.

1, GRAP design là gì?

GRAP là viết tắt của General Responsibility Assignment Software Patterns hoặc (Principles), nó bao gồm các quy tắc để gán trách nhiệm (responsibilty) cho các Object và class trong thiết kế hướng đối tượng (OO design).

GRAP Có 9 nguyên tắc như sau:

  • Creator.
  • Information Expert.
  • Low Coupling.
  • Controller.
  • High Cohesion.
  • Indirection.
  • Polymorphism.
  • Protected Variations.
  • Pure Fabrication.

Tất cả các nguyên tắc này sẽ khắc phục một số vấn đề về phần mềm và là phổ biến đối với hầu như mọi dự án phát triển phần mềm.

GRAP sẽ giúp cho bạn quyết định được chức năng nào nên cho vào class/object nào, từ đó sẽ giúp bạn xác định được miền khi hệ thống có vấn đề,...

2, Các nguyên tắc.

Creator.

Who creates an Object? Or who should create a new instance of some class?

Ai có thể tạo ra Object? Ai nên tạo ra instance của một class?

Nguyên tắc nói bạn cần phải xác định được đối tượng nên được khai báo ở đâu và các instance của nó nên được raise ở đâu?

VD: Chúng ta có 2 class Book và BookStore. BookStore là một cửa hàng chứa các Book vậy thì Book cần, nên được instance trong BookStore.

Information Expert.

Information expert (also expert or the expert principle) is a principle used to determine where to delegate responsibilities

Nguyên tắc này sử dụng để xác định nơi mà một chức năng được khai báo.

VD: Muốn lấy ra thông tin của tất cả các Sách đang có trong thư viện, ta tạm gọi hành động này là một method getAllBooks(), dựa vào nguyên tắc Information Expert thì chúng ta nên đặt method getAllBooks() vào trong class BookStore.

Low Coupling.

Coupling is a measure of how strongly one element is connected to, has knowledge of, or relies on other elements. Low coupling is an evaluative pattern that dictates how to assign responsibilities to support.

Nguyên tắc này nói chúng ta cần giảm các độ phụ thuộc xuống để ứng dụng của chúng ta có khả năng tái sử dụng cao hơn, ít bị ảnh hưởng hơn khi có bất cứ một thay đổi yêu cầu nào.

Controller.

The controller pattern assigns the responsibility of dealing with system events to a non-UI class that represents the overall system or a use case scenario. A controller object is a non-user interface object responsible for receiving or handling a system event.

Nguyên tắc controller nói chúng ta sẽ gán trách nhiệm xử lý các sự kiện của hệ thống cho một class, class này có dùng để tiếp nhận và xử lý các sự kiện trên hệ thống. Đây chính là controller trong MVC.

High cohesion.

High cohesion is an evaluative pattern that attempts to keep objects appropriately focused, manageable and understandable

Nguyên tắc này nói chúng ta cần giữ cho các đối tượng tập chung một cách thích hợp, dễ quản lý và dễ hiểu. Nguyên tắc này được sinh ra để hỗ trợ cho nguyên tắc low coupling.

Polymorphism.

Nguyên tắc này chính là tính đa hình trong OOP - hướng đối tượng.

Pure Fabrication.

pure fabrication is a class that does not represent a concept in the problem domain, specially made up to achieve low coupling, high cohesion, and the reuse potential thereof derived (when a solution presented by the information expert pattern does not).

Một pure fabrication là một class không đại diện cho một miền vấn đề nào đó, đặc biệt là tạo ra để làm cho sự ghép nối thấp (low coupling), gắn kết cao (high cohesion).

VD: ví dụ như các class Adapter.

Indirection

The indirection pattern supports low coupling (and reuse potential) between two elements by assigning the responsibility of mediation between them to an intermediate object.

 Nguyên tắc này này nói để giảm tính ghép nối thấp (low coupling) giữa các đối tượng với nhau thì chúng ta có thể tạo ra một object trung gian đển xử lý điều đó.

Protected Variation

The protected variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.

Nguyên tắc này nói chúng ta cần phải bảo vệ những thành phần từ các biến thể trên một thành phần khác. Đó chính là tính đa hình đóng gói trong hướng đối tượng 

Nguồn: Toidicode.com

Thông tin tác giả

Vũ Thanh Tài

Vũ Thanh Tài

Biển học vô biên, quay đầu là dại!

Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức! Tham Gia