Các mẫu Ruby on Rails - Decorator vs Presenter


112

Gần đây, có đủ loại cuộc nói chuyện trong cộng đồng Ruby on Rails về người trang trí và người trình bày.

Sự khác biệt cơ bản giữa hai là gì? Nếu có, những manh mối cho tôi biết nên sử dụng cái nào hơn cái kia? Hoặc có lẽ để sử dụng cả hai kết hợp?

Câu trả lời:


102

Decorator là một "hãy thêm một số chức năng vào thực thể này". Người thuyết trình không chỉ là một "hãy xây dựng cầu nối giữa mô hình / phụ trợ và chế độ xem". Mẫu người thuyết trình có một số cách giải thích.

Người trang trí là mục đích chung / chung. Người thuyết trình có phạm vi trách nhiệm / mục đích sử dụng hẹp hơn. Người trình bày được sử dụng trên các miền, người trình bày hầu như luôn có liên quan đến chức năng dạng xem.


3
Cảm ơn. Có vẻ như Draper gem là sự kết hợp giữa người thuyết trình và người trang trí.
keruilin

17
@keruilin Một điều cần lưu ý: Người trang trí thực sự phải có khả năng trang trí những người trang trí khác (cũng như trang trí đối tượng thành phần), bởi vì một trong những mục đích của họ là giải quyết những hạn chế của tính kế thừa. (Draper không làm điều này). Mẫu trang trí rất giống với mẫu kết hợp theo nghĩa đó, ngoại trừ được xử lý từ ngoài vào trong thay vì từ trong ra ngoài (nếu điều đó hợp lý).
smudge

7
Tôi thấy trình trang trí là một mẫu có mục đích chung và trình trình bày là một ứng dụng cụ thể của trình trang trí liên quan đến lớp xem.
Kris

2
@Smudge, người trang trí draper có thể trang trí các kiểu trang trí khác, ít nhất là như thể các mô hình cơ bản có mối quan hệ STI.
keruilin

Có vẻ như bây giờ Draper tự nhận mình là trình bao bọc lớp trình bày - vì vậy nó không còn là một người trang trí nữa mà thực sự là một người trình bày. Từ GH của họ: "Draper thêm một lớp logic trình bày hướng đối tượng vào ứng dụng Rails của bạn."
Jared

35

Tôi đề nghị bạn kiểm tra điều này - Triển lãm vs Người trình bày .

Decorator là một mẫu thiết kế được sử dụng để mở rộng chức năng của một đối tượng cụ thể bằng cách bao bọc nó mà không ảnh hưởng đến các phiên bản khác của đối tượng đó. Nói chung, decorator pattern là một ví dụ về nguyên tắc mở / đóng (lớp đóng để sửa đổi, nhưng có sẵn cho phần mở rộng).

Cả mẫu trưng bày và người thuyết trình đều là một loại mẫu trang trí.


+1 cho liên kết đến bài đăng blog đó của Mike Pack. Bài đăng tuyệt vời giải thích sự khác biệt giữa các mẫu.
ki4jnq

+1 để đề cập đến mẫu Triển lãm. Tôi đã nhận được cuốn sách của Avdi Grimm giải thích điều đó. Mặc dù, nó không phải là giải pháp phù hợp cho vấn đề của tôi, nó vẫn là một mô hình tuyệt vời. Món ăn tuyệt vời cho sự suy nghĩ.
Yonk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.