2009-10-11 6 views
0

Je pense à écrire une classe pour stocker quelques méthodes utiles qui se rapportent à mon modèle, aux séquences de mon modèle et à mon référentiel. Je ne pense pas que ceux qui sont responsables de calculer quoi que ce soit. Ce n'est pas vraiment un service en soi non plus.Où est un bon endroit pour les méthodes de calcul de données? Comment devrait-il être appelé?

Je veux faire quelque chose comme ceci:

IEnumerable<Game> someGames; 
... 
int score = _something.CalculateScore(someGames); 

Qu'est-ce que cette couche appelée? Helper pourrait-il être un bon nom?

En outre, le modèle peut faire quelques calculs de base comme ceci:

class Ticket 
{ 
    IList<Log> Log { get; } 
    Tech LastUpdatedBy { get { return Log.Last().By; } 
} 

ou est-ce hors de portée d'une classe de données de modèle?

Répondre

1

La séparation de couche est une chose logique, et devrait être traitée avec un certain degré d'élasticité. L'approche stricte consisterait à supprimer toute la logique de la couche de modèle, à la stocker et à la récupérer, et rien d'autre. Selon cette approche, toute la logique devrait résider dans la couche logique métier. L'autre aspect de cette pièce est l'approche décontractée, qui ne se soucie pas vraiment de la dispersion des bribes de logique, certaines dans le calque du modèle et d'autres aussi loin que le code côté client. Ceci est plus flexible, mais devrait être utilisé avec plus de prudence.

Personnellement, je laisserais les petits fragments dans le calque du modèle. Les méthodes de calcul des données sont généralement au cœur de la couche logique métier et, dans certains cas, elles sont placées de façon statique dans leur propre classe pour être largement réutilisées. Cela dépend de vos besoins.

1

Je laisserais ces méthodes dans le modèle. Ma règle générale est la suivante: si elle est suffisamment générique pour que toute implémentation puisse en tirer parti, il est possible de laisser le modèle dans le modèle, sinon il appartient à un autre emplacement.

2

Votre utilisation du terme "Modèle" me suggère que vous utilisez une architecture MVC. Une philosophie commune dans les architectures MVC est la suivante: Controllers should be as "skinny" as possible.

En utilisant cette approche, votre méthode CalculateScore() devrait faire partie de votre modèle. Votre contrôleur ne doit contenir que la logique nécessaire pour sélectionner les vues et interagir avec les requêtes du navigateur de l'utilisateur. La façon dont je pense à cela est que si je convertis mon application web MVC à une application de console, je garderais le modèle mais jetterais les contrôleurs et les vues.

Questions connexes