TÌM HIỂU VỀ HÌNH MẪU THIẾT KẾ: REPOSITORY PATTERN
1.Nhắc lại 1 chút về hình mẫu thiết kế
- Chắc hẳn ai trong chúng ta học lập trình cũng đã được biết qua môn Lập trình hướng đối tượng. Và Design Pattern là 1 trong những kĩ thuật cực hay trong môn hướng đối tượng. Để mình giới thiệu qua cho các bạn có thể nắm rõ hơn nó nhé!
- Design Pattern là một kỹ thuật cung cấp cho chúng ta cách tư duy trong các tình huống xảy ra của lập trình hướng đối tượng cũng như trong quá trình phân tích thiết kế và phát triển phần mềm. Vì vậy Design Pattern không phải là một Class, cũng không phải là một Library, và cũng không hề là một ngôn ngữ cụ thể nào cả
- Không những vậy, Design Pattern cung cấp cho chúng ta các mẫu thiết kế, các giải pháp cho các vấn đề chung thường gặp trong lập trình, đảm bảo sẽ cung cấp cho chúng ta các giải pháp tối ưu trong việc giải quyết các vấn đề trong lập trình.
- Phân loại Design Pattern 1 chút:
+ Nhóm khởi tạo (Creational): giúp chúng ta trong việc khởi tạo các đối tượng
+ Nhóm cấu trúc (Structural): thường dùng để giải quyết mối quan hệ giữa các thực thể (entities)
+ Nhóm hành vi (Behavioral): dùng trong việc thể hiện các hành vi của đối tượng, tương tác (communicate) giữa các đối tượng dễ dàng hơn
- Vậy thế tại sao phải dùng Design Pattern ? Câu trả lời là Design Pattern cung cấp cho chúng ta các giải pháp ở dạng tổng quát nhất, giúp chúng ta tăng tốc độ phát triển phần mềm thông qua các mô hình đã được kiểm nghiệm thực tế. Và quan trọng nhất Sử dụng Design Pattern giúp chúng ta tránh được các lỗi tiềm ẩn (nhất là trong những hệ thống lớn), đồng thời có khả năng tái sử dụng cao để có thể dễ nâng cấp và bảo trì trong tương lai.
2. Nội dung chính : Repository Pattern
- Repository Pattern là lớp trung gian giữa tầng Business Logic và Data Access, giúp cho việc truy cập dữ liệu chặt chẽ và bảo mật hơn
- Thông thường thì các phần truy xuất, giao tiếp với database năm rải rác ở trong code, khi bạn muốn thực hiện một thao tác lên database thì phải tìm trong code cũng như tìm các thuộc tính trong bảng để xử lý. Điều này gây lãng phí thời gian và công sức rất nhiều => Chậm deadline :(
- Lợi ích khi dùng Design Pattern:
+ Một nơi duy nhất để thay đổi quyền truy cập dữ liệu cũng như xử lý dữ liệu.
+ Một nơi duy nhất chịu trách nhiệm cho việc mapping các bảng vào object.
+ Tăng tính bảo mật và rõ ràng cho code
+ Rất dễ dàng để thay thế một Repository với một implementation giả cho việc testing, vì vậy bạn không cần chuẩn bị một cơ sở dữ liệu có sẵn
- Việc nói lý thuyết không thì rất là khó vào và khá là buồn ngủ, vậy chúng ta sẽ xem 1 chút code để có thể hiểu rõ hơn về hình mẫu thiết kế này nhé
3. Ví dụ mẫu
- Controller không sử dụng Repository
Ta có thể kết luận được gì:
Chúng ta thấy code rất dễ đọc và chặt chẽ, tuy nhiên có một vấn đề cần chú ý ở đây đó là Controller được gắn chặt với Model dùng để thực hiện các thao tác với Cơ sở dữ liệu (database). Điều này gây ra 2 vấn đề nghiêm trọng như sau nếu ta không để ý:
- Chúng ta không thể viết Test cho Controller.
- Controller vô hình chung đã bị gắn chặt với ORM Layer, nếu trong tương lai chúng ta muốn thay đổi cấu trúc bảng hay thực hiện giải pháp nào đó tái cấu trúc, chúng ta sẽ gặp khó khăn trong việc phải tìm lại toàn bộ các controller và sửa.
- Giải pháp sử dụng Repository
Để giải quyết 2 vấn đề nghiêm trọng nêu ở trên, giải pháp đưa ra đó là Repository. Chúng ta sẽ có một lớp trừu tượng ngay trên tầng Cơ sở dữ liệu (database), bởi vậy thay vì việc Controller tương tác trực tiếp với Model, Controller sẽ làm việc với lớp Repository đã được đóng gói với các thao tác trong Model
Và khi đó trương tác giữa Controller và Repo như sau:
Nó giúp bạn dễ dàng hơn trong việc thay đổi sử dụng các loại ORM khác nhau, hoặc các kỹ thuật ở tầng Cơ sở dữ liệu khác nhau. Bạn có thể thay đổi sử dụng MongoDB thay vì MySQL hay tương tự như vậy mà không sợ ảnh hưởng quá nhiều đến việc xử lý logic ở Controller. Việc chúng ta cần làm chỉ là thực hiện thay đổi ở các lớp Repository thay vì phải đi tìm ở tất cả các Controller để thay đổi thao tác phù hợp với những thay đổi phía Model
Đó là những gì tôi muốn nói về Repository Pattern. Hãy sử dụng và bạn sẽ cảm nhận được sự hiệu quả của nó !!
vtcc_intern_9
,phát triển sản phẩm
Bài viết bổ ích
Duong Nguyen
Bài viết bổ ích
Thinh Vu
Bài viết hay đấy!
Người ẩn danh
Các chủ để về design partern rất hữu ích. Tiếp tục post Hưng nhé
Hooljgan Nguyenhuu
Rất bổ ích
Hung Nguyen
Tôi không hiểu bài viết lắm nhưng vẫn upvote