Kod Yapsın Hangi nerede MVC Yapısı

6 Cevap php

Benim sorunum modeli ve ben sadece (oluşturma, okuma, güncelleştirme, silme) rezil için MVC kullandığınızda controller.Everything benim için mükemmel çalışır arasında bir yerde bulunmaktadır. Her veritabanı tablo için ayrı modelleri var. Ben kumandadan bu modelleri erişmek, rezil etmek onları. Örneğin, kişiler uygulamasında, ben (oluşturma, okuma, güncelleştirme, silme) modelin (iletişim) yöntemleri kullanmak için kontrolör (iletişim) eylemleri (oluşturma, okuma, güncelleştirme, silme) var.

Daha karmaşık bir şey yapmaya çalıştığınızda sorun başlar. Ben onları koymak nereye bilmiyorum bazı karmaşık süreçler vardır.

  1. Örneğin, kullanıcı sürecini kayıt içinde. (Diğer modeller aracılığıyla kullanıcının diğer kayıtları oluşturma, posta gönderme) da diğer modeller kullanmak ve diğer modeller yoluyla karmaşık doğrulamaları çok yapmak zorundayız, çünkü ben sadece kullanıcı modelinde bu süreci bitirmek olamaz.
  2. Örneğin, bazı karmaşık arama süreçlerinde, ben (makaleler, vkimlikeolar, resimler vb) modelleri çok erişmek zorunda
  3. Ya da, bazen, ben verilerini kaydetmek için hangi veritabanı modeli sonraki veya ne yapacağını karar API'leri kullanmak zorunda

Peki bu karmaşık işlemleri yapmak için bir yerdir. Bazen ben de diğer denetleyicileri bu süreçleri kullanmak gerekir Çünkü, denetleyicileri bunları yapmak istemiyorum. Ben veritabanı erişim katmanı gibi modelleri kullanmak, çünkü ben modellerde bu süreci koymak istemiyorum. Ben yanlış olabilir, ben bilmek istiyorum. Cevabınız için teşekkür ederim.

6 Cevap

Basit görevler için ben eylem yardımcıları (örn. sendNewsletter) yazardı.

Sophistocated görevler için ben hizmetleri (örn. e-posta, auth vb) oluşturmak woud.

Bu AFAIK sadece kısa bir yorum (hiçbir çözüm) bir sonsuz soru - MVC sadece bir desen, ve gibi, temiz in theory uygulanabilir olduğunu. Uygulamada, nedeniyle mevcut araçlar tarafından belirlenen sınırlamalara (örneğin programlama dili kütüphanesi içeriği ve UI bileşeni arayüz tasarımı gibi ..) yerel kararlar var. Önemli şey, aim ... bu ayrı ve bir karmaşa içinde her şeyi yok olmasıdır. Ben hava kapalı benim yorum almak ve birisi "nihai çözüm" olup olmadığını görmek için kaldım.

MVC olarak, (biri için yeniden nedenlerle) modelinde şeyleri koymalısın.

Ancak, her yerde HVMC, sen (böyle bir denetleyicisi gibi) koyun verebilir ve uygulama içinde denetleyicileri diyoruz.

Ben senin denetleyicileri basit olur.

Birçok yönden modeli aksi takdirde denetleyicisi kod tıkamaktadır olacağını karmaşık bir sürü boşaltması sağlar. Kodunuzu daha kolay anlaşılır yapmak ve korumak için daha kolay olacaktır karmaşıklık Onun bu bölümü.

şahsen ben gerçek dünya nesneleri değil, veritabanları tablolar veya satır benzeyen benim modellerini tutmaya çalışın. Bir şeyler daha okunabilir açısından konuşmak yaptık eğer çok daha kolay hale getirir. Tek bir gerçek dünya bir nesne 5 veya 6 veritabanı tabloları dahil olabilir ... Ve yapmak istediğiniz tüm anahtarı açmak, ya da bir çiçek, ya da boya almak olduğu zaman 5 veya 6 modelleri ile konuşmak için oldukça büyük bir güçlük olurdu bir simge veya bir mesaj gönderin.

Ne Birden modelleri kullBirnBirrBirk bir kontrolör ile yBirnlış? Modeli yeniden kullBirnılBirbilir hBirle getirmek için MVC noktBirsı değil midir? İlk senBirryodBir, bu e-postBirlBirr göndermek ve "kBiryıt kullBirnıcı" denetleyicisi kod yerden diğer model nesneleri işlemek için gBiryet iyi.

İkinci senBirryoyBir göre, neden SeBirrchController kullBirnmBirk ArticleModel, ImBirgeModel edemez ve VideoModel? Bu model olmBirdBirn bir denetleyici olmBirsı iyidir. SeBirrchController bir SeBirrchModel sınıf gerekmez, sBirdece diğer model sınıflBirrı kullBirnır.

Ben web uygulBirmBirlBirrı MVC hBirkkındBir bir rBirnt içine BirlmBirk için çBirlışıyorum, BirmBir temelde, IMHO denetleyici bir işlemi tBirmBirmlBirmBirk için BirdımlBirr sBirdece bir üst düzey listesidir. KBirbBir bir örnek olBirrBirk, "kBiryıt kullBirnıcı" denetleyicisi kod kod kBirbBircBir bir veyBir iki sBirtır olBirrBirk BirşBirğıdBirki BirdımlBirrın her biri yBirpmBirlıdır:

  1. VBirlidBirte the input
    1. Eğer geçerli değilse, bir hBirtBir ile formunu yeniden görüntülemek
  2. Form girişinden yeni UserModel nesne oluşturmBir
  3. VeritBirbBirnınBir yeni UserModel nesne ekleme
  4. Nesneler gerekli olBirn ne olursBir olsun diğer bir model oluşturmBir / düzenleme
  5. Yeni kullBirnıcıyBir bir e-postBir göndermek
  6. DisplBiry Bir "registrBirtion successful" pBirge

Bu BirdımlBirr kodlu nBirsıl büyük ölçüde kullBirndığınız ne olursBir olsun çerçeve / mimBirrlık bBirğlıdır.

Temiz denetleyicileri tutun. Vb MailManager gibi arka uç işleme kullanımı Müdürü sınıflar için.