Not: Robert C. Martin (diğer adıyla Bob Amca) bunu açılış konuşması Mimarlık Kayıp Yılları'nda çok daha iyi ve esprili bir şekilde açıklamaktadır . Biraz uzun ama çok iyi kavramlar öğretiyor.
tl; dr: MVC açısından uygulamanızı düşünmeyin ve planlamayın. MVC çerçevesi sadece bir uygulama detayıdır.
MVC ile ilgili en kafa karıştırıcı olan şey, geliştiricilerin yapıştırılmış tüm bileşenleri kullanmaya çalışmasıdır.
Çerçeve açısından değil, bir program açısından düşünmeyi deneyin.
Programınızın bir amacı var. Bazı veriler alır, verilerle işler yapar ve bazı veriler döndürür.
Bu şekilde, controller
programınızın dağıtım mekanizmasıdır.
- Bir kullanıcı programınıza bir istek gönderir (diyelim ki alışveriş sepetine bir ürün ekleyin).
- Denetleyici bu isteği alır (ürün bilgisi ve kullanıcı bilgisi), programınızın bu isteği işleyecek gerekli bölümünü çağırır
$user->addToCart($product)
- Programınız ( bu durumda nesnenin
addToCart
işlevi user
) yapmak istediği işi yapar ve bir yanıt döndürür (diyelim success
)
- Kontrolör, ilgili olanı kullanarak yanıtı hazırlar
view
: örn. denetleyici nesnesinde$this->render($cartView('success')
Bu şekilde kontrolörler programdan ayrılır ve iletim mekanizması olarak kullanılır. Programınızın nasıl çalıştığını bilmiyorlar, sadece programın hangi kısmının talepler için çağrılması gerektiğini biliyorlar.
Başka bir çerçeve kullanmak istiyorsanız, uygulamanızın bir değişikliğe ihtiyacı yoktur, istekleriniz için programınızı aramak üzere ilgili denetleyicileri yazmanız yeterlidir.
Veya bir masaüstü sürümü yapmak istiyorsanız, uygulamanız aynı kalacak, sadece bir dağıtım mekanizması hazırlamanız gerekecek.
Ve Model
. Bunu bir kalıcılık mekanizması olarak düşünün.
OO yolunda, programınızda verileri tutan nesneler vardır.
class User {
//...
private $id;
private $shoppingCart;
//...
}
class Product {
//...
private $id;
//...
}
Eğer alışveriş sepetine ürün eklediğinizde, ekleyebilir product::id
için user::shoppingCart
.
Verileri kalıcı hale getirmek istediğinizde model
, sınıfları veritabanı tablolarıyla eşleştirmek için çerçevenin genellikle bir ORM kullanarak oluşan kısmını kullanabilirsiniz .
Kullandığınız ORM'yi değiştirmek isterseniz, programınız aynı kalacaktır, sadece eşleme bilgileri değişecektir. Veya veritabanlarını hep birlikte kullanmak istemiyorsanız, verileri düz metin dosyalarına yazabilirsiniz ve uygulamanız aynı kalır.
Önce programınızı yazın. 'OO' yolu ile programlama yapıyorsanız, dilin düz eski nesnelerini kullanın. İlk başta MVC açısından düşünmeyin.