Pola Ruby on Rails - dekorator vs presenter

112

Akhir-akhir ini ada banyak pembicaraan di komunitas Ruby on Rails tentang dekorator dan presenter.

Apa perbedaan mendasar antara keduanya? Jika ada, petunjuk apa yang memberi tahu saya mana yang harus digunakan di atas yang lain? Atau mungkin menggunakan keduanya bersamaan?

keruilin
sumber

Jawaban:

102

Dekorator lebih merupakan "mari tambahkan beberapa fungsionalitas ke entitas ini". Presenter lebih merupakan "mari kita bangun jembatan antara model / backend dan tampilan". Pola penyaji memiliki beberapa interpretasi.

Dekorator bersifat generik / tujuan umum. Penyaji memiliki rentang tanggung jawab / penggunaan yang lebih sempit. Dekorator digunakan di seluruh domain, penyaji hampir selalu terkait dengan fungsi seperti tampilan.

Dave Newton
sumber
3
Terima kasih. Sepertinya permata Draper adalah hibrida antara presenter dan dekorator.
keruilin
17
@keruilin Satu hal yang perlu diingat: Dekorator harus benar-benar bisa mendekorasi dekorator lain (sekaligus mendekorasi objek komponen), karena salah satu tujuannya adalah untuk menyiasati keterbatasan pewarisan. (Draper tidak melakukan ini). Pola dekorator sangat mirip dengan pola komposit dalam hal ini, kecuali ditangani dari luar ke dalam, bukan dari dalam ke luar (jika itu masuk akal).
noda
7
Saya melihat dekorator sebagai pola tujuan umum, dan presenter sebagai aplikasi dekorator khusus yang terkait dengan lapisan tampilan.
Kris
2
@Smudge, dekorator gorden dapat mendekorasi dekorasi lain, setidaknya seolah-olah model yang mendasarinya memiliki hubungan IMS.
keruilin
Tampaknya sekarang Draper mengidentifikasi dirinya sebagai pembungkus lapisan presentasi - jadi itu bukan lagi dekorator, tetapi sebenarnya seorang presenter. Dari GH mereka: "Draper menambahkan lapisan logika presentasi berorientasi objek ke aplikasi Rails Anda."
Jared
35

Saya sarankan Anda untuk memeriksa ini - Exhibit vs Presenter .

Dekorator adalah pola desain yang digunakan untuk memperluas fungsionalitas objek tertentu dengan membungkusnya, tanpa memengaruhi contoh lain dari objek tersebut. Secara umum, pola dekorator adalah contoh prinsip buka / tutup (kelas tertutup untuk modifikasi, tetapi tersedia untuk ekstensi).

Baik pola pameran maupun pola presenter adalah sejenis pola dekorator.

dpaluy
sumber
1 untuk menautkan ke entri blog itu oleh Mike Pack. Posting bagus yang menjelaskan perbedaan antara pola.
ki4jnq
1 untuk menyebutkan pola Pameran. Saya akhirnya mendapatkan buku Avdi Grimm yang menjelaskannya. Meskipun, itu bukan solusi yang tepat untuk masalah saya, itu masih merupakan pola yang luar biasa. Makanan luar biasa untuk dipikirkan.
Yonk