2011-10-22 18 views
97

Son zamanlarda Ruby on Rails topluluğunda decorators ve sunum yapanlarla ilgili her türlü konuşma var.Ruby on Rails desenleri - decorator vs presenter

Bu ikisi arasındaki temel fark nedir? Varsa, hangisinin diğerinden hangisini kullanacağını söyleyen ipuçları nelerdir? Ya da belki de ikisini birlikte kullanabilir mi?

cevap

88

Bir dekoratör daha çok "bu öğeye bazı işlevler ekleyelim". Bir sunum yapan kişi daha çok "model/arka plan ve görünüm arasında bir köprü kuralım". Sunum modeli çeşitli yorumlara sahiptir.

Dekoratörler genel/genel amaçlıdır. Sunumların daha dar bir sorumluluk/kullanım alanı vardır. Dekoratörler alanlar arasında kullanılır, sunum yapan kişiler neredeyse her zaman görüntü benzeri işlevsellik ile ilgilidir.

+3

Teşekkürler. Draper gem, sunum yapan ve dekoratörün bir melezi gibi görünüyor. – keruilin

+16

@keruilin Akılda tutulması gereken bir şey: Dekoratörler, diğer dekoratörleri (bileşen nesnesini süslemenin yanı sıra) gerçekten dekore edebilmelidir, çünkü amaçlarından biri mirasın sınırlarını aşmaktır. (Draper * bunu yapmaz *). Dekoratör kalıbı, bu anlamda kompozit kalıba çok benzemektedir, iç-dış yerine dıştan içe işlenmenin dışında (eğer bu mantıklıysa). – Smudge

+5

Genel amaçlı bir desen olarak bir dekoratör görüyorum ve görüntü katmanına ilişkin özel bir dekoratör uygulaması olarak sunumu yapıyorum. – Kris

29

Bunu kontrol etmek önermek - Exhibit vs Presenter.

Dekoratör, belirli bir nesnenin işlevselliğini, nesnenin diğer örneklerini etkilemeden, sarmak suretiyle genişletmek için kullanılan bir tasarım desenidür. Genel olarak, dekoratör modeli open/close principle'un bir örneğidir (sınıf değişiklikler için kapatılır, ancak uzantılar için kullanılabilir).

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

+0

+1. Desenler arasındaki farklılıkları açıklayan mükemmel mesaj. Sergi deseninden bahsetmek için – ki4jnq

+0

+1. Avdi Grimm'in bunu açıklayan kitabını aldım. Sorunum için doğru çözüm olmasa da, yine de şaşırtıcı bir model. Düşünce için mükemmel yiyecek. – Yonk