2009-01-21 26 views
73

Sadece bir bankacılık benzetimi olan MVC'yi açıklayan bir blog post okudum. Web uygulaması geliştirme konusunda MVC framework (CakePHP) ile birkaç ay deneyimim var, bu yüzden temel bilgileri alıyorum ama mantığı koyduğum yere kusurlu bir yaklaşım getirdiğimi düşünen bir tema görmeye başladım:Yağ modelleri, sıska denetleyicileri ve MVC tasarım deseni

  • Yağ modelleri, sıska kontrolörler
  • benim app

mümkün olarak modellerinde olduğu kadar iş mantığını tutun, modeller anoreksik ve denetleyiciler obez. Denetleyicilerde tüm iş mantığım var ve modellerde dernekler ve doğrulama kuralları dışında bir şey yok.

  • uygulama öğeleri içeren listeleri vardır ve öğeleri sıralanabilir: my kontrolörleri aracılığıyla

    Tarama, şimdi muhtemelen modelde gitmeli mantığı çok tanımlayabilir. Listeyi sıralanmış sıraya koyan sıralama mantığı denetleyicide bulunur.

  • Benzer şekilde, öğeler (Öğe modeli) de görüntülere sahiptir (Görüntü modeli). Her öğenin varsayılan bir resmi olabilir (öğeler tablosunda image_id tarafından belirtilmiştir). Resimlerle bir öğe görüntülendiğinde, önce varsayılan resim görünmelidir. Bir denetleyicide bunu yapan mantığa sahibim.
  • Bir liste görüntülendiğinde, ilgili listeler kenar çubuğunda görüntülenir. Hangi listelerin ilişkili olduğunu belirleyen mantık denetleyicide bulunur. Ben o mantık örneklerini halen bir modelde ait bir denetleyici olduklarını düşünerek doğru yolda olduğumu, yukarıda verdi örnekler ile

    1. : Sorularıma
    2. Şimdi

?

  • Modellere gitmesi gereken web uygulamalarında ortak olan diğer mantık alanları nelerdir?
  • Bu problemi tanımlamak ve tasarım desenimi değiştirmek kesinlikle savaşın yarısıdır, ancak yukarıda verdiğim örnekleri almaya karar vermem ve bu mantığı bir modele taşımayı denememe rağmen, nereden başlayacağımı bilmiyorum . Buraya bazı kodlar göndererek veya bazı iyi öğrenme kaynaklarına bağlantı kurarak bana doğru yönde işaret edebilir mi? CakePHP'ye özel yardım harika olurdu ama eminim ki MVC yeterli olacaktır. Benim mantık doğru yerde olup olmadığını en azından bu iki 'testleri' kontrol etmek kullanıyorum
  • +0

    Daha önce duydum :) – Marco

    cevap

    54

    Bu uzantı, "doğru" cevap vermek biraz zor.En azından CakePHP'de açısından

    :

    1. Evet veri veya veri manipülasyonu ile ilgilenen

    2. şey bir model olmalıdır. CakePHP açısından ne basit bir find() yöntemi? ... Eğer başka bir yere ihtiyaç duyacağınız "özel" bir şey (yani belirli bir 'koşul') çağrısı yapma şansı varsa, bu bir modelin yöntemine sarmak için iyi bir bahane olur.

    3. Maalesef hiçbir zaman kolay bir cevap yoktur ve kodun yeniden düzenlenmesi doğal bir süreçtir. Bazen sadece bir uyanırsın: "kutsal makarna ... bu modelde olmalı!" (belki de bunu yapmıyorsunuz, ama bende var :))

    +2

    güzel koymak. Ve iyi bir blog yazısı da var. – andyk

    +5

    Blog yazarı, kazanan cevap FTW yazıyor! – Xeoncross

    19

    : Sadece bir tane oluşturmak için

    1) Bir UnitTest yazarsam, bir 'gerçek kolaydır 'nesnenin üzerinde test yapması (= üretimde kullandığınız nesne) ve belki de bazı değer nesneleri haricinde başkaları içermez. Bir test yapmak için hem gerçek bir model nesnesine hem de gerçek denetleyici nesnesine gereksinim duymanız, işlevselliği taşımak için ihtiyacınız olan bir sinyal olabilir. 2) Kendime şu soruyu sorun: bu sınıfları kullanmanın başka bir yolunu eklediysem, işlevselliği kopyalayıp yapıştıracak şekilde çoğaltmam gerekir mi? ... Bu da bu işlevselliği taşımak için iyi bir sebep.

    da ilginç: bazıları (bakılmaksızın Çalıştığınız olanlar) çerçevesinde özelliklerine başa beri http://www.martinfowler.com/bliki/AnemicDomainModel.html

    İlgili konular