2010-02-19 3 views
5

J'écris une application ASP.NET dans laquelle j'ai une couche d'interface utilisateur, une couche logique métier et une couche d'accès aux données. À partir de ma couche de données, je renvoie les objets métier à la couche logique métier et les transmets à la couche d'interface utilisateur. Cependant, je ne suis pas sûr de ce que je dois faire lorsque je souhaite effectuer une sauvegarde/insertion avec des données de la couche d'interface utilisateur.Que dois-je retourner de la couche d'interface utilisateur à la couche de gestion?

Dois-je créer l'objet métier au niveau de la couche d'interface utilisateur et le transmettre à la couche de gestion ou dois-je le créer dans la couche de gestion?

merci beaucoup

+0

merci à tous pour vos commentaires - très apprécié – Nick

Répondre

2

Je suis d'accord avec crunchdog-- pour toutes les applications web, sauf les plus triviales, vous devriez avoir une forme aplatie de vos objets métier spécifiquement pour votre couche UI/vue. Parfois, cela s'appelle une classe de modèle de vue et ne contient généralement pas plus de plusieurs propriétés de chaîne que la couche d'interface utilisateur peut obtenir et mettre à directement sans se soucier de la validation. (Voir asp.net mvc)

D'une part, ce qui maintient le nettoyeur de la couche d'interface utilisateur et plus simple, laissant pour le mettre ses efforts vers l'affichage des données plutôt que de traverser des structures d'objets, de vérification et l'interprétation des valeurs nulles, etc.

Cela a également donne à la couche de gestion la possibilité de valider ces valeurs de chaîne, en retournant les valeurs telles qu'elles sont entrées si elles ne sont pas valides. Cela peut sauver la frustration de codage lorsque, par exemple, votre serveur doit gérer une date invalide dans un champ de date. La couche de gestion, reconnaissant les valeurs non valides, peut les renvoyer exactement telles qu'elles sont reçues avec les messages d'erreur appropriés. Si tout ce que vous avez traité était des objets métier/domaine, certaines valeurs entrées peuvent ne pas toujours correspondre aux objets destinés à les contenir.

Il peut également être utile de définir une classe pour le mappage des valeurs entre les objets métier/domaine et le modèle d'objet/vue d'interface utilisateur. Cela permet de conserver les préoccupations de la couche de gestion séparément.

0

je trouve mieux d'avoir des objets de la couche d'interface utilisateur qui modélisent les objets métier « vrais ». Ces objets de modèle n'ont pas besoin de toutes les informations (associations et autres) que possèdent les objets métier "réels". Ensuite, la couche métier doit être en charge de la conversion depuis et vers les objets métier. Ceci est particulièrement pratique pour les applications Web car il n'est pas nécessaire d'envoyer des données excessives au client.

+0

Crunchdog parle d'objets de transfert de données ou DTO pour court: http://en.wikipedia.org/wiki/Data_transfer_object. – Steven

0

Si vous ne voulez pas un codage excessif de l'objet métier, vous avez fait la bonne chose lors de la récupération des données (où vous renvoyez le même objet métier de DAL vers BL vers UI). Lors de la sauvegarde des données, vous pouvez transmettre ces objets en tant que paramètres sur votre couche BL et/ou DAL. Vous pouvez soit renvoyer l'objet en cours si vous l'avez lié sur votre contrôle d'interface utilisateur ou créer une nouvelle instance de cet objet et définir les modifications effectuées.

Ensuite, sur votre couche DAL, lisez simplement l'objet et enregistrez les modifications dans la base de données.

0

J'ai trouvé que la solution la plus simple consiste à faire passer un objet View Model de l'interface utilisateur à la couche Business, pour plusieurs raisons. La plus évidente est que la validation doit avoir lieu dans la couche de gestion, de sorte que la création d'un objet métier dans l'interface utilisateur rompt les principes de MVC. Plus important encore, si l'utilisateur entre des données invalides, un objet métier peut (correctement) ne pas être en mesure d'accepter ces données.Cependant, vous ne voulez pas jeter les données que l'utilisateur a saisies. Ainsi, un objet View Model sans validation vous permet de stocker et de transmettre les données saisies par l'utilisateur, qu'elles soient valides ou non.

Questions connexes