Question

J'ai un ASP.NET MVC3 en C # et rasoir. L'architecture de l'application est divisée en couche d'accès aux données (des classes EF + dépôt), la couche de service, contrôleur, ViewModels et Voir.

Mon ViewModel expose une méthode Fill qui accepte en tant que paramètre de la collecte de données à afficher dans la Afficher . Pour ne pas avoir couplage entre les composants, la méthode Fill doit être appelé à partir de la Service Layer ou de Controller ?

Était-ce utile?

La solution

Définition: Modèle (comme dans MVC) = couche de service (dans ce cas)

Le régulateur doit être conspiré comme une colle entre la vue et le modèle. La vue ne doit pas être au courant du modèle et vice versa.

La réponse à votre question est donc que le contrôleur doit contenir toute logique utilisée pour déplacer les informations du modèle au modèle de vue. Il est tout d'utiliser une classe à partir du modèle dans le modèle de vue.

Mise à jour en réponse aux commentaires

Comme je l'ai dit. Je ne sais pas comment vos classes ressemble ou ce que vous devez faire pour générer la navigation.

  1. Le contrôleur doit être utilisé pour assembler les informations requises par le modèle de vue
  2. Le contrôleur ne doit pas avoir de logique métier

Cela signifie que vous pourriez avoir à créer de nouvelles classes dans votre couche de service pour être en mesure d'atteindre ces deux objectifs.

Autres conseils

Il serait préférable de supprimer la fonction de remplissage de votre ViewModel alors le ViewModel ne vais pas dépend de votre couche de données.

Je voudrais donc utiliser quelque chose comme Automapper dans le contrôleur pour cartographier le DataObject Pour ViewModel avant de retourner la vue.

ActionMethod:

public ActionResult Edit(int id)
{
    var data = DataRepo.Get(id);
    var viewMode = Mapper.Map<ViewModel>(data);
    return View(viewModel);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top