The Repository Design Pattern

Trong bài viết này, bạn và tôi sẽ thảo luận về mẫu kho lưu trữ , nhưng trước tiên hãy xem xét mẫu thiết kế

Mẫu thiết kế là gì?

  • Mẫu thiết kế là một kỹ thuật trong lập trình hướng đối tượng cung cấp cho chúng ta cách suy nghĩ trong bối cảnh của lập trình hướng đối tượng cũng như trong thế giới thực. 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 lớp, nó không phải là một thư viện, nó không phải là một ngôn ngữ cụ thể.
  • Mẫu thiết kế cung cấp cho chúng tôi các mẫu thiết kế để giải quyết các vấn đề thường gặp trong lập trình và đảm bảo cung cấp cho chúng tôi giải pháp tốt nhất cho các vấn đề lập trình.
  • Phân loại các mẫu thiết kế

    • Design pattern chủ yếu được chia thành 3 nhóm:
      • Nhóm khởi tạo ( creational ): giúp chúng ta khởi tạo các phần tử, đối tượng, nó cung cấp Thủ thuật tạo đối tượng mà không có từ khóa mới. Ví dụ: nhà máy trừu tượng, phương pháp nhà máy, đơn lẻ, người xây dựng, nguyên mẫu …
      • Nhóm cấu trúc ( structure ): Thường được sử dụng để giải quyết mối quan hệ giữa các thực thể, giúp thao tác các đối tượng dễ dàng hơn. Ví dụ: bộ điều hợp, cây cầu, vật liệu tổng hợp, đồ trang trí, mặt tiền, proxy và vật nặng …
      • nhóm hành vi ( behavior ): dùng để thể hiện hành vi của các đối tượng, sự tương tác (giao tiếp) giữa các đối tượng dễ dàng hơn. Ví dụ: thông dịch viên, phương pháp mẫu, chuỗi trách nhiệm, lệnh, trình lặp, người hòa giải, bản ghi nhớ, người quan sát, trạng thái, chính sách và khách truy cập …
      • Tại sao sử dụng các mẫu thiết kế?

        • Mẫu thiết kế cung cấp cho chúng tôi dạng giải pháp chung nhất giúp chúng tôi tăng tốc phát triển phần mềm với các mô hình đã được chứng minh.
        • Việc sử dụng Mẫu thiết kế giúp chúng tôi tránh được các lỗi tiềm ẩn (đặc biệt là trong các hệ thống lớn) và có khả năng tái sử dụng cao nên có thể dễ dàng nâng cấp và bảo trì. bảo trì trong tương lai.
        • Mẫu kho lưu trữ là gì?

          • Mẫu kho lưu trữ là lớp trung gian giữa logic nghiệp vụ và truy cập dữ liệu, giúp cho việc truy cập dữ liệu trở nên chặt chẽ và an toàn hơn.
          • Kho lưu trữ đóng vai trò là lớp kết nối giữa lớp nghiệp vụ và mô hình ứng dụng.
          • Thông thường, các phần truy cập và giao tiếp với cơ sở dữ liệu nằm rải rác trong mã, khi muốn thao tác trên cơ sở dữ liệu, bạn phải vừa tra mã vừa tìm các thuộc tính trong bảng để xử lý. Điều này gây lãng phí rất nhiều thời gian và sức lực.
          • Sử dụng mẫu thiết kế kho lưu trữ, việc thay đổi mã sẽ không ảnh hưởng nhiều đến công việc chỉnh sửa.
          • Có một số lý do tại sao chúng ta nên sử dụng mô hình kho lưu trữ:
            • Nơi thay đổi quyền truy cập dữ liệu và xử lý dữ liệu.
            • Nơi chịu trách nhiệm ánh xạ bảng với các đối tượng.
            • Cải thiện tính bảo mật và rõ ràng của mã.
            • Việc thay thế một kho lưu trữ bằng một triển khai thử nghiệm rất dễ kiểm tra, vì vậy bạn không cần phải chuẩn bị một cơ sở dữ liệu hiện có.
            • Hãy cùng tìm hiểu thêm về kho lưu trữ với các ví dụ cụ thể để bạn dễ hình dung hơn. Tôi sẽ sử dụng trợ giúp của laravel để mô tả nó tốt hơn. Lưu ý rằng laravel hoặc các khuôn khổ mvc khác có thể áp dụng ý tưởng kho lưu trữ.

              Bộ điều khiển không sử dụng kho lưu trữ

              Trong một ứng dụng mvc điển hình, việc triển khai thô sơ của bất kỳ tài nguyên nào như sau:

              Chúng tôi thấy rằng mã rất dễ đọc và nhỏ gọn, nhưng có một điểm hạn chế ở đây, bộ điều khiển được liên kết với mô hình được sử dụng để thực hiện các hoạt động cơ sở dữ liệu. Nếu chúng ta không cẩn thận, điều này có thể dẫn đến hai vấn đề nghiêm trọng:

              • Chúng tôi không thể viết thử nghiệm cho bộ điều khiển.
              • Bộ điều khiển vô hình chung đã được liên kết với lớp orm. Nếu chúng tôi muốn thay đổi cấu trúc bảng hoặc thực hiện một số lược đồ tái cấu trúc trong tương lai, chúng tôi sẽ khó tìm thấy bộ điều khiển và trình chỉnh sửa tổng thể.
              • Giải pháp sử dụng kho lưu trữ

                Để giải quyết hai vấn đề nghiêm trọng nêu trên, giải pháp là kho lưu trữ. Chúng ta sẽ có một lớp trừu tượng ở trên cùng của lớp cơ sở dữ liệu, vì vậy bộ điều khiển tương tác trực tiếp với mô hình thay vì lớp kho lưu trữ đóng gói các hành động trong mô hình.

                Các lớp kho lưu trữ có thể được hình dung như thế này:

                Sau đó, tương tác giữa bộ điều khiển và kho lưu trữ như sau:

                Chúng tôi có thể thấy rằng bộ điều khiển hiện tại không còn tương tác trực tiếp với mô hình nữa. Câu hỏi đặt ra là tại sao điều này lại tốt? Có phải chúng ta chỉ thêm công việc bằng cách thay thế sự tương tác giữa bộ điều khiển và mô hình bằng một cầu nối kho lưu trữ?

                Đối với các dự án nhỏ, bạn có thể thấy công việc này thừa và phải viết nhiều mã hơn. Tuy nhiên, đối với các dự án lớn với logic phức tạp hoặc các yêu cầu thay đổi, việc trừu tượng hóa kho lưu trữ này có ích.

                Nó giúp bạn thực hiện các thay đổi dễ dàng hơn với các loại orm khác nhau hoặc các công nghệ lớp cơ sở dữ liệu khác nhau. Bạn có thể thay đổi để sử dụng mongodb thay vì mysql hoặc một cái gì đó tương tự mà không lo ảnh hưởng đến quá nhiều logic trong bộ điều khiển. Tất cả những gì chúng ta cần làm là thực hiện các thay đổi trong lớp kho lưu trữ thay vì tìm kiếm tất cả các bộ điều khiển để thay đổi hành động dựa trên các thay đổi ở phía mô hình.

                Một lợi ích của kiến ​​trúc này là chúng ta có thể dễ dàng tạo các lớp kho lưu trữ giả trong các bài kiểm tra đơn vị:

                Kết luận

                Mẫu kho lưu trữ

                • không giới hạn ở laravel hoặc php mà tôi đã trình bày ở trên, chỉ cần mô tả ngắn gọn mẫu này bằng mã php. Ngoài ra, nó còn được sử dụng rộng rãi trong kiến ​​trúc phần mềm và được phát triển trên nhiều ngôn ngữ khác nhau.
                • Mô hình này được thiết kế để giúp bạn phản hồi dễ dàng hơn với các thay đổi cơ sở dữ liệu. Tất nhiên, bạn không cần phải tuân theo mô hình này trong tất cả các dự án đang làm, bạn có thể chọn hoặc không. Nhưng nó cũng được coi là thực hành tốt, vì vậy tôi có vẻ như tôi nên tuân theo thực hành tốt nào, vì dù sao thì mô hình này cũng đã được thử nghiệm và sử dụng rộng rãi.
                • Liên kết tham khảo

                  1. http://slashnode.com/the-repository-pattern/
                  2. http://heera.it/laravel-repository-pattern
                  3. http://shawnmc.cool/the-repository-pattern
                  4. http://ryantablada.com/post/two-design-patterns-that-will-make-your-application-better

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *