Bir Denetleyici işlevini başka bir Denetleyiciden çağırmak iyi bir pratik midir?


23

Tek bir denetleyicide bir arama mantığını ele aldığım ve aramalara dayanarak bazı veriler üretiyorum ve istatistik olarak döndürdüğüm bir durum var.

Bir denetleyici işlevini başka bir denetleyiciden çağırmak iyi bir pratik mi? Veya iki kontrolör asla konuşmamalı mı?

Yanıtlar:


24

Farklı diller / çerçeveler farklı MVC yaklaşımlarına sahip olduklarından, cevap kullandığınız dile / çerçeveye bağlı olsa da bu oldukça garip.

Genelde, bir denetleyiciyi diğerinden bir denetleyiciyi kullanmayacaksınız.

  • Kontrolörler genellikle MVC çerçevesi tarafından kullanılması amaçlanan bir türün sonucunu döndürür. Bu sonuç, arayan olarak ihtiyaç duymadığınız (görünümün adı gibi) pek çok bilgiyi içerir ve ilginizi çekebilecek bilgileri almayı her zaman kolaylaştırmaz (sizin durumunuzda model, doğru tahmin edersem).

  • Denetleyicilerin iş kodundan başlatılması kolay değildir, çünkü genellikle HTTP isteği ve içeriği hakkında bir miktar bilgiye ihtiyaç duyarlar. Tüm bu bilgilerin MVC çerçevesi tarafından iletilmesi beklenmektedir.

Daha da önemlisi, iki denetleyicide bir grup arama sonucuna ihtiyacınız varsa - biri son kullanıcıya sonuçları gösteren, diğeri istatistik üreten başka bir şey ise, arama mantığını iş katmanınıza koymanız (ilk başta olduğu yer), bu arada), ve kontrol cihazlarınızı mümkün olduğunca küçük tutun.

MVC'de bir kontrolörün rolü, süreci düzenlemektir:

  • İsteğin ilgili girişini al,
  • Validatorlara girişi doğrulama / temizleme görevi verme yetkisi verilmesi,
  • İlgili iş katmanı yöntemlerini çağırın,
  • MVC çerçevesine ortaya çıkan modeli ve görüşü verin.

Bir denetleyicinin rolü, iş mantığını ele almak değildir.

Kod iş katmanına taşındıktan sonra, bir denetleyicinin diğerinden kullanılmasının aksine, net ve anlaşılır bir şekilde yeniden kullanılabilen bir arama arayüzü sağlayabilirsiniz.


Merhaba, Cevabınız için teşekkür ederim. Arama mantığını işletme katmanına taşıdığımı varsayarak, arama arayüzünü yerleştirmek için en iyi yer neresidir? Laravel kullanıyorum.
IAmJulianAcosta

Ne yazık ki, Laravel'i hiç kullanmadım. Dahası, cevabın çerçeveden ziyade uygulamanızın mimarisine bağlı olacağını hayal ediyorum.
Arseni Mourzenko,

Kök projenizle birlikte http klasörü altında olduğunuzu varsayalım. Burada sözleşme adında bir klasör ve buraya yerleştirebileceğiniz arabirim olarak işlev gören tüm dosyalarınızı oluşturabilirsiniz
Faris Rayhan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.