Ruby on Rails kalıpları - dekoratör ve sunum yapan kişi


112

Son zamanlarda Ruby on Rails topluluğunda dekoratörler ve sunum yapanlar hakkında her türlü konuşma var .

İkisi arasındaki temel fark nedir? Varsa hangisini diğerine göre kullanacağımı söyleyen ipuçları nelerdir? Ya da belki ikisini birlikte kullanmak için?

Yanıtlar:


102

Bir dekoratör daha çok "hadi bu varlığa bazı işlevler ekleyelim". Sunum yapan kişi daha çok "model / arka uç ve görünüm arasında bir köprü oluşturalım" dır. Sunucu kalıbının birkaç yorumu vardır.

Dekoratörler genel / genel amaçlıdır. Sunum yapanların daha dar sorumlulukları / kullanımları vardır. Dekoratörler etki alanlarında kullanılır, sunum yapanlar neredeyse her zaman görünüm benzeri işlevsellikle ilgilidir.


3
Teşekkürler. Görünüşe göre Draper gem, sunum yapan ve dekoratörün bir karışımı.
keruilin

17
@keruilin Unutulmaması gereken bir şey: Dekoratörler, diğer dekoratörleri (ve bileşen nesneyi dekore etmenin yanı sıra) gerçekten dekore edebilmelidir, çünkü amaçlarından biri kalıtımın sınırlamalarını aşmaktır. (Draper yok değil bunu). Dekoratör modeli, bu anlamda kompozit modele çok benzer, ancak içten dışa değil dışarıdan içeriden ele alınır (eğer mantıklıysa).
leke

7
Genel amaçlı bir model olarak bir dekoratör ve görünüm katmanıyla ilgili özel bir dekoratör uygulaması olarak sunum yapan kişi görüyorum.
Kris

2
@Smudge, draper dekoratörleri, en azından altta yatan modellerin bir STI ilişkisi varmış gibi diğer süsleri dekore edebilir.
keruilin

Görünüşe göre Draper kendini sunum katmanı sarmalayıcısı olarak tanımlıyor - bu yüzden artık bir dekoratör değil, aslında bir sunum yapan kişi. GH'lerinden: "Draper, Rails uygulamanıza nesne yönelimli bir sunum mantığı katmanı ekler."
Jared

35

Bunu kontrol etmenizi öneririm - Sergi vs Sunucu .

Dekoratör, belirli bir nesnenin işlevselliğini, o nesnenin diğer örneklerini etkilemeden sararak genişletmek için kullanılan bir tasarım modelidir. Genel olarak, dekoratör modeli, açma / kapama ilkesinin bir örneğidir (sınıf, değişiklikler için kapalıdır, ancak uzantılar için mevcuttur).

Hem sergileme hem de sunum kalıbı bir çeşit dekoratör kalıbıdır.


Mike Pack'in bu blog gönderisine bağlantı için +1. Desenler arasındaki farkları açıklayan mükemmel bir gönderi.
ki4jnq

Sergi modelinden bahsetmek için +1. Avdi Grimm'in bunu açıklayan kitabını aldım. Sorunum için doğru çözüm olmasa da, yine de harika bir model. Düşünce için mükemmel yiyecek.
Yonk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.