Sayfa başına bir denetleyici veya bir denetleyicide birçok sayfa var mı?


16

Ben sadece MVC bir şeyler yapmak için tavsiye istedim. Codeigniter kullanıyorum ve bir web sitesi için sayfa başına bir denetleyici olması veya tüm sayfalar için bir denetleyici olması daha iyi olduğunu merak ediyordum ?

Ana sayfayı ziyaret edebileceğiniz, giriş yapabileceğiniz, bir hesap oluşturabileceğiniz ve yöneticiyle iletişim kurabileceğiniz basit bir web sitem olduğunu varsayalım.

  1. Şu denetleyicilere sahip olmak daha iyi olur: ön uç (dizin), giriş, hesap, iletişim VEYA ön uç adı verilen bir denetleyiciye sahip olmak veya giriş, createAccount, iletişim gibi eylemlerle herhangi bir şey varsa?

  2. Bir denetleyiciyi bir durumda kullanmanın daha iyi olup olmadığını ne zaman biliyorsunuz?


Her zaman inançla yaşadım: Hepsine hükmetmek için bir kontrolör ve Karanlıkta onları bağlayın. (Gerçekten değil, ama sesini seviyorum. :-)
Peter Rowell

Yanıtlar:


17

Mantık birimi başına denetleyiciye sahip olmak daha iyidir, örneğin AccountController (oturum açma, kayıt), PagesController (ana sayfa, kişi), Arka uç -> PagesController (oluşturma, düzenleme, silme), UsersController (oluşturma, düzenleme, silme vb.).


Bu alanları içeren bir web sitesini nasıl temsil edersiniz: ev, giriş, hesap, iletişim. Örneğiniz gibi 2 kontrol cihazı kullanır mısınız? localhost'a giderseniz / homecontroller'ı açarsanız, localhost / contact'a teoride giderseniz, kontrol cihazına gitmemelisiniz? ve arka uçta ne demek istiyorsun?
Rushino

Sayfaların yapısına ve kaç sayfanız olduğuna bağlıdır. HomeController (home, contact) veya PagesController (home, contact OR ayrıntıları (id)) yapacağım. Örneğin, ASP.NET MVC'de Ana Sayfa ve Hakkında sayfası ile varsayılan HomeController var.
Santas

Bu yöntemi seviyorum. Ayrıca, uygulamanızın belirli bir bölümüne özgü olmayan Jquery.Ajax aracılığıyla çağırılan İşlemler için bir ClientController (veya her ne demek isterseniz). Başka bir deyişle, görüşleriniz herhangi birinden yeniden kullanılabilir
Chris

Bana doğru cevabı görün. CodeIgniter, denetleyicileri bölgelere ayırmayı sağlayan denetleyiciler için alt dizinleri kabul eder, böylece iki sayfa denetleyicisi (her bölge için bir tane) ile sonuçlanabilir. Teşekkürler!
Rushino

Ama eylemlerin hepsi göreceli olsa bile, biraz büyük Kontrolörler ile sonuçlanmaz mı? Yoksa sorun değil mi?
Kid Diamond

4

@Rushino Burada iki 'uygulamanız' var - ön uç (okuyucular için) ve arka uç (yöneticiler için). Her işlevsellik grubu için bir denetleyiciniz vardır.

Oturum açma, HTML formunun oluşturulmasını (görünümleri çağıran alanlar) ve formun işlenmesini (modele bağlanma, doğrulama) içeren böyle bir gruptur. Yani 'login' iki eylemli bir kontrolördür - createForm ve handleForm.

Sayfalar, yalnızca sayfaları gösteren ön uç uygulaması ile bunları farklı bir şekilde düzenlemeye, silmeye, oluşturmaya ve muhtemelen görüntülemeye olanak tanıyan arka uç uygulaması arasında bölünür. Ana sayfa, en azından ön uçta 'sadece başka bir sayfadır', bu yüzden sayfa denetleyicisine sığar. Arka uçta, mantığı tamamen farklı bir denetleyiciye sahip olmasını haklı gösterecek kadar farklı olabilir.

Kullanıcılar için - kullanıcılar kendilerini kaydedebilirlerse, bir ön uç denetleyicisine ihtiyaç duyarlar, ancak değilse, kullanıcılarla yapılacak her şey arka uca gider.

Arka uç işlevlerinin her birinin hem jeneratör hem de işleyici gerektirebileceğini unutmayın. Bu şeyler, genel bir form üreticisi olan bir eklenti ile yapılandırma dosyalarına bölünebilir.

Özetle şöyle görünür:

Frontend
  Pages
    View, Handle
  Login
    View, Handle
  Users
    Register (note that the handler can be the same as 'create' on the backend)
  Contact
    View
    Handle

Backend
  Users
    Create, Delete, Edit, Update, View
  Pages
    Create, Delete, Edit, Update, View

Bekleyin .. bir bölümün bir uygulamayı temsil ettiğini mi söylüyorsunuz? ilginç bir şekilde yapmanın yolu (ve muhtemelen yapmanın yolu). Kodekitörün bu şekilde yapılıp yapılmadığını merak ediyorum .. kontrol edecek. Herhangi bir oturum veya bağlantı durumunu bozmadan bir uygulamadan diğerine gidebileceğinizden emin olmalıyım.
Rushino

1
@Rushino CodeIgniter bunu bu şekilde yapabilir - Klasörleri Kontrolörler dizinine koyabilirsiniz. 'Uygulamalar' arasındaki fark veritabanı / model düzeyinde değil, kontrolör / görünüm düzeyinde. Ayrılmanın nedeni, arka ucunuzun genellikle tamamen farklı bir tasarımla çok farklı şeyler yapmasıdır. IP ile tüm arka uç dizinini kısıtlayabileceğiniz için güvenlik konusunda yardımcı olur. Ve gelişmeye yardımcı olur, çünkü ön ucu etkilemeden arka uç üzerinde çalışabilirsiniz.
Dan

2

Siparişlerle ilgili tüm işlemler için OrdersController gibi bir iş birimi başına bir Denetleyici kullanmanız gerektiğini düşünüyorum. Bu durumda, Denetleyicilerin BÜYÜK olduğunu biliyorum, ancak eylemleri ayrı dosyalara yaymak için model başlatma ve kısmi sınıflar gibi şeyleri devretmek için hala yardımcı sınıfları kullanabiliriz.

Örneğin Create.cs and OrdersControllerher biri karşılık gelen eylemler kümesi ile OrdersController sınıfı için OrdersController List.cs dosyaları olabilir . İşleri daha temiz hale getirir ve tek bir denetleyici sınıfında sipariş işlemlerini merkezileştirir.

Sadece 2 sentim.


0

Bence farklı bir yaklaşım benimseyebilirsin:

Ön kapı olarak belirli denetleyicilere istek sağlayan bir ana denetleyici. Bu şekilde, kullanıcı kimlik doğrulaması, google analitik ve yapmak istediğiniz diğer genel şeyleri kontrol etmek ve MVC yapısını saf tutmak için bu ön denetleyiciyi kullanabilirsiniz.

Bu benim fikrim değil ama Symfony Framework bu şekilde çalışıyor, bu yüzden size deneyimlerime göre bunun bir ön uç uygulamak için gerçekten güzel ve zarif bir yol olduğunu söyleyebilirim.

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.