2010-10-11 3 views
0

mon application a beaucoup de tables de support qui nécessite l'interface admin d'interface utilisateur pour maintenir - par exemple: pays, états, villes etc. Je ne sais pas s'il serait logique d'ajouter des actions CRUD pour chacun d'entre eux dans un AdminController ou créer un contrôleur pour chaque table de support individuelle.Tables de support - créer un contrôleur pour chaque?

+0

La solution AdminController n'aurait de sens que si vous construisiez des méthodes d'action réutilisables - les méthodes pour chaque entité différente se retrouveraient avec un Fat Controller: http://codebetter.com/blogs/ian_cooper/archive/2008/12/03/ the-fat-controller.aspx – bzlm

Répondre

0

Si votre code est hautement répétitif et que vous disposez des abstractions de couche de données appropriées (par exemple, modèle de référentiel, injection de dépendance), vous pouvez créer un contrôleur d'administration générique et le sous-typer.

public abstract class AdminController<T> : Controller 
{ 
    protected IRepository<T> _Repository; 

    protected AdminController(IRepository<T> repo) 
    { 
     _Repository = repo; 
    } 

    public ViewResult List() 
    { 
     var all = _Repository.GetAll(); // todo paging, sorting, etc -- I'd use a service layer to do this 
     return View(all); 
    } 

    public ViewResult Edit(int id) 
    { 
     var item = _Repository.GetById(id); 
     return View(item); 
    } 
    // and so on... 
} 

Ensuite, les contrôleurs réels:

public class PostController : AdminController<Post> 
{ 
    public PostController(IRepository<Post> repo) : base(repo) {} 
} 

Bien sûr, vous aurez toujours besoin de faire toutes les vues.

+0

Ryan, je pense que c'est exactement ce que j'essaie de faire - même si je dois comprendre un peu plus les génériques pour pouvoir l'implémenter. L'utilisateur bzlm a posté un lien vers un article qui parle de gros contrôleurs, ce qui est un peu la direction que je cherche aussi. La meilleure pratique serait de garder les contrôleurs maigres et les modèles gros et comme beaucoup d'actions CRUD sont similaires, utilisez votre solution d'abstraction. Si je n'impose pas trop, avez-vous un code de travail/lien vers le blog où vous l'avez expliqué afin que je puisse l'essayer moi-même? J'essaie toujours de mettre mes mains/tête autour de MVC2 ...! – uberDesi

Questions connexes