MVC Mimarisine göre yeni aynı zamanda da eski birikimlerimi bir projede birleştirmek istiyorum. Model kısmında database ile ilgili sınıflar,methodlar ve fonksyionlar; Wiev bölümünde site arayüzünü oluşturduğum kütüphanlerim (tema,şablon,css,html,images vs.) bulunuyor; Controller bölümüne geldiğimde ise modelde bulunan bileşenlerler controllerda bulunması gereken bileşenler arasında gelgitler yaşadım.
Model katmanında insert işlemini gerçekleştirmek için sınıf,method ve fonksiyonlarım bulunuyor. Fakat bir türlü nelerden oluşacağına karar veremedim. Model ile controller arasındaki soyut bağlantıyı kuramadım. bir örnekle açıklamanız mümkün mü tecrübeli arkadaşlardan rica etsem ?
Ustalara sordum verilen cevaplar ise şöyle…
Standart MVC şemasına göre kullanıcı etkileşimli fonksiyonlar Controller içerisinde bulunur ve sunum, güncelleme, ekleme gibi işlemlerde Model kullanarak data erişimi yapar. View ile de kullanıcıya sunar. Bazı yerlerde Controller’a ek bir dosya kullanıldığını gördüm. Ama bu sistem gereksinimlerine göre ayarlanmalı. Dolayısı ile kullanıcının erişeceği fonksiyonlar ki buradaki kastım index – users – topics – contact tarzı sunum fonksiyonları Controller içerisi için uygun ancak direk data etkileşimi olmayacak ve bunu Model ile sağlayacak şekilde ayarlanmalı.
Veri kaynağı ilgili işler modelde olmalı. Mesela veritabanından veri çekme, yazma, silme.Verini modelden aldın, controller’da senin asıl işinle ilgili kodlar yer almalı. Mesela “kullanıcı eğer onaylı değilse yazı yazamasın” kontrolü, mesela “ödemeyi alacak kodların tetiklenmesi” , mesela “doğum gününde siteye girenlere banner çıkarma”.Business katmanında iş, Data (model) katmanında veri ile ilgili kodlar bulunacak. Bu ayrımı çok iyi yapmak pek mümkün değil başlarda, model katmanı oldukça basit olmalı veri çekip almalı.
Bir sonraki soracağın soru da aynı kodu 2 controller’da kullanmam gerekiyor ne yapayım. İşte orada araya service katmanı dahil etmen gerekiyor.
controller (login sayfası)-> service (user ile ilgili genel kodlar)–> model (user tablosu işlemleri)
Kullanıcı profil sayfasından da ilgili kodlara ulaşman gerekince service’ten ulaşacaksın bu yapıda. Controller sadece önyüz ile haberleşmeyi sağlayacak.
Controller gelen istekleri karşılayıp, gerekli işlemlerin yapılması için atamalar yapan katmandır. Bu atama veritabanında bir güncelleme isteğide olabilir (modelle atama yapar). Bazı kontrollerin sonrasında başka bir controller’a yönlendirmede olabilir.
Kısaca danışma gibi düşünebilirsin. Kapıdan girişte seni karşılar. İşini görüp göremeyeceğini söyler, işin çözülmesi için gerekli masalara yönlendirir, masalardan gelen cevaplara göre Bir çıktı üretilecekse kaynağından (departmanlardan) işlenmiş bilgileri toplar, sunum katmanına gönderir.
bazı durumlarda, işi üstlenemeyeceğini söylerek seni başka bir binaya (controller veya action) a yönlendirir. Ve süreç yeniden başlar.