2010-09-09 34 views
2

J'écris un système client/serveur. Le serveur a un design DAL/BLL. Le client est responsable de présenter les objets de données et de fournir des boîtes de dialogue et un assistant pour permettre à l'utilisateur de mettre à jour ces objets (c'est-à-dire ajouter/éditer un utilisateur).DAL/BLL et Client/Serveur: Le client doit-il utiliser des objets BLL ou DAL pour la présentation? Ou peut-être une autre couche (objet de transfert de données?)

Initialement, je pensais que je vais juste faire en sorte que les objets DAL aient un objet fournisseur de données universel afin qu'ils puissent être utilisés aussi bien par le client que par le serveur. Par exemple, lorsque l'objet de données est utilisé par le serveur, la base de données est le fournisseur de données; Lorsque l'objet de données est utilisé par le client, le serveur est le fournisseur de données. Donc un objet est modifié au niveau de la couche de présentation, par exemple un "utilisateur": user-> setName ("Fred"), et le valide comme cet utilisateur-> commit(), la méthode commit appelle les données La méthode commit du fournisseur, qui code ensuite l'objet et l'envoie au serveur. Le serveur "décore" ensuite avec l'objet de couche de gestion et continue à partir de là.

J'ai actuellement ce travail en tant que prototype, avec les objets DAL définis dans un projet partagé qui est utilisé à la fois par le client et le serveur. Le serveur injecte ensuite son fournisseur de données (qui utilise la base de données) et le client injecte un fournisseur de données qui utilise le serveur. Je me demande si cela semble être une approche raisonnable? Je me demande si j'ai besoin d'une autre couche plutôt que d'avoir les objets DAL directement exposés au client. Peut-être une couche d'objets de transfert de données, qui me donnerait 3 couches: Objets d'accès aux données, objets de logique métier et objets de transfert de données.

Merci.

Répondre

1

Ce n'est pas une bonne idée d'exposer des 'objets intérieurs' comme les objets utilisés/retournés achètent le DAL. Il vaut mieux garder tous les objets internes cachés du client et avoir un ensemble complet d'objets pour la communication client-serveur. Cela peut être un travail supplémentaire de conversion d'un objet en un autre mais facilitera la mise à jour du système au cas où le serveur et le client ne se mettraient pas à jour ensemble.

+0

+1 Dans les systèmes non triviaux, les données que vous souhaitez échanger entre ces couches seront différentes. Si vous vouliez réutiliser quelque chose, alors une interface (que les objets implémentés) pourrait bien fonctionner - mais je ne l'ai jamais fait moi-même. –