Ben "yanlış yapıyorsun" Am

2 Cevap php

Ben bir denetleyici varsa, örneğin makale Ben genellikle action_view() bu kod çoğu kolları var.

Bazen, uzun 80-100 çizgiler olabilir.

Benim kontrolör genellikle bütün bu işler:

  • bağlayıcı şablon değişkenleri
  • ayar seansları (uygun)
  • e-posta göndermek
  • formlarını doğrulama

Ben ille yeniden kullanmak için, ama endişeleri ayrılması için, bit ve ben denetleyicisi başka bir özel yöntemi yapabiliriz parçalarını görebiliyordu.

Ancak, o zaman sadece dahili olarak bir yolla çağrılabilir yöntemleri ve yöntemleri olan (benim için) garip görünüyor.

Ayrıca bazı şeyler "Ben model değil, denetleyici olmalıdır" bana söylüyorlar. Ancak, bu da doğru olup olmadığından emin değilim.

Sonunda, oldukça usul görünüyor biraz şişman denetleyicisi yöntemi var.

Aslında benim action_* yöntemlerinin üst bir listesini var, ve sonra daha küçük modülleri içine benim kod kalanını ayrı mıdır?

Ben aşağıda bir örnek var ... Bu tipik denetleyici şeyler olduğunu, ya da oturumlar vb modelinde olmalıdır?

public function action_pdf($type, $id) {

        // Get PDF file from db and send headers to it
        $id = (int) $id;

        $pdfFile = $this->model->getPdf($id, $type);

        if ($pdfFile) {
           $this->request->redirect($pdfFile);
        } else {
           $this->session->set('pdfMissing', true);
           $this->request->redirect(Route::get('properties')->uri());
        }

    }

Yani, benim soru, ben yanlış yapıyorum edilir?

2 Cevap

Sizin Modelleri uzak mimarisi (kontrolörleri, Görüntülendi) geri kalanından soyut veri depolama katmanına genellikle iş mantığı ve saklanması vardır.

Bunun anlamı, herhangi bir veritabanı (örneğin, SQL sorguları) erişir ve bu ideal modellerin içinde yer alması gerektiğidir. Sizin denetleyici kendisi doğrudan veritabanına erişmek zorunda kalmadan (bu modeller ile kendisini ortaya koyar ORM içerir) modellerin, verilerini alacak.

Bildiğim kadarıyla e-posta gönderme sanırım olduğu gibi duruma bağlıdır. Örneğin, bir kullanıcı işaretleri kadar ben veritabanına kendi bilgilerini eklemek için bir model yöntemini çağırdığınızda. Bu yöntem daha sonra kendilerine gönderilecek bir e-posta tetikler. Bu şekilde ben çok modelinde kayıt yöntemini çağırır olursa olsun, sistem unutmayacağım (ve ben bu durumda ne istediğinizi) kaydolma iş mantığı açık bir parçası göndererek e-posta yapıyorum bir e-posta göndermek için.

Bu doğrulama formu gelince, ben denemek ve ORM modeli sınıflarında benim doğrulama kurallarının en belirtin. Modeli manipüle olursa olsun, modeli her zaman kendi verileri doğrulamak için nasıl bazı içsel anlayış vardır ki bu. Ve ORM modeli nesne zaten veri doğrulama için bir yöntem sağlar fark edeceksiniz. Herhangi bir ek doğrulama / modeli doğal modeli kod dışından yapılabilir kapalı takip hakkında bilmeniz gerekmez callbacks.

IANAPHPD (Ben bir PHP Dev Am) ama genel bir programlama dili (Java / C #) ve perspektif geliştirici yardımcı olabilir. Bana göre, MVC faydalarından biri temel iş mantığı ve çoklu UI ile sunulması gerekmektedir altyapıya sahip olduğunda kod yeniden kullanımını teşvik etmektir. Örneğin, bir web arayüzü gibi bir masaüstü arabirimi olan bir sipariş yönetimi sistemi. Bu durumda, bu temel mantık modelidir. Üç arayüzlerinin her orada kendi Görüntüleme ve Kontrolörler var. C #, bu temel mantık bir masaüstü UI projesi gibi bir web uygulaması projesi başvurulan paketleri / derlemeler bir dizi olduğunu kodunuz yapısı saçmadır.

Belirli bir uygulamayı başka bir UI ihtiyacınız olmayacak eminim bile ben bu terimlerle düşünmek. Ben bir şey modeli veya denetleyicisi gitmeli karar çalışıyorum, ben ask myself if that functionality should be reusable from another UI.

PHP web platformu (bildiğim kadarıyla) kadar sıkı bağlı olduğundan, bu PHP kod düşünme biraz doğal olmayan bir yoldur. Ne olursa olsun, bu düşünce yol hala (Kaygıları Ayırma ve tekrar edin etmeyin) tutar hala uygulanabilir: a secondary "UI" PHP could support would be a web service API. Bir özellik, bir web sitesi ve web hizmeti API hem mevcut olmalıdır, o Modelinde maruz olmalıdır.

Siz veya ilgi olmayabilir, ama genel olarak, bu düşünce yolu Domain-Driven Design ile mükemmel entegre.

Not: PHP tarafından desteklenen tüm UI'ler web tabanlı olmasına rağmen, ben hala (tarayıcı oturumları, çerezler, vb, izleme vurmak ile ilgili her şey), öncelikle bu endişeleri sunum olduğundan modele web spesifik kaygılar koyarak dikkatli olurdum -merkezli değil, iş odaklı, ve ikincil olarak bu zor noktasına sistemini parça parça ne sebeple başka bir dil / platform sonradan yapar çünkü.