Question

Je travaille sur une petite application à partir de zéro et l'utiliser pour essayer de me enseigner des concepts d'architecture et de design. Il est un .NET 3.5, l'application WPF, et j'utilise Sql Compact Edition comme mon magasin de données.

Je travaille sur la couche logique métier, et je viens maintenant commencé à écrire le DAL. Je suis juste en utilisant SqlCeComamnds d'envoyer sur des requêtes simples et SqlCeResultSet pour obtenir des résultats. Je commence à concevoir mes méthodes Insérer et mise à jour, et voici la question - je ne sais pas la meilleure façon d'obtenir les données nécessaires de la BLL dans le DAL. Est-ce que je passe dans une collection générique? Ai-je une liste de paramètres massive avec toutes les données de la base de données? Est-ce que je passe simplement dans l'objet métier réel (liant ainsi mon DAL à l'étoffe conrete dans le BLL?).

je pensais à l'aide d'interfaces - IBusinessObjectA simplement passer dans le DAL, qui fournit la simplicité que je cherche sans me lier trop étroitement à des implémentations actuelles. Qu'est-ce que vous en pensez?

Était-ce utile?

La solution

Si j'étais dans votre position, je serais probablement utiliser LINQ to SQL pour définir ma couche d'accès aux données - il va vous faire économiser beaucoup de travail maintenant tout ce genre de choses SqlCeFooBar et vous donner un concepteur (de toutes sortes) pour maintenir votre base de données que vous auriez manque, en utilisant SQL cE.

Donc, dans ce cas, je serais probablement coupler la couche logique d'affaires assez bien aux entités exposées par la couche L2S. La justification étant que les entités sont les objets métier, quoique dépourvue de tout service.

Je ne probablement pas laisser les entités jusqu'à obtenir la hiérarchie que l'interface utilisateur bien. A ce niveau, il est beaucoup plus logique d'utiliser un modèle spécifique pour la vue - en particulier étant donné que vous utilisez WPF

.

Bien sûr, tout cela dépend de la taille et de la complexité de votre application. Je suppose que c'est une application assez petite échelle (un seul utilisateur?) Étant donné que vous utilisez SQL CE.

Autres conseils

Je ne pense pas qu'il y ait une réponse simple à vos questions, car il y a beaucoup d'options en fonction des circonstances. Je l'ai trouvé utile de lire les deux livres ci-dessous pour me aider à comprendre les problèmes que vous décrivez mieux.

  • MS .NET: Architecturer Applications pour l'entreprise (Esposito, Saltarello)
  • MS application Guide d'architecture, 2ème édition.

Le deuxième livre est disponible en ligne. Regardez .

Je pense qu'il est correct de passer l'objet métier à la couche d'accès aux données. Je pense que le travail de BLL est juste de travailler avec ses objets, pour vérifier si toutes les règles sont respectées, ce qui peut être sauvé, par qui, sur quels domaines, le temps, etc.

Une fois qu'il a fait qu'il devrait passer à la DAL, et je pense qu'il est est le travail de savoir comment convertir ce qu'il a en quelque chose qui peut être persisté, mais il l'habitude de vérifier ce qui est persisté ou lire ou par qui, il suffit de faire. Cela pourrait être foward droite, à la LINQ, mais si vos mdoels logiques ne correspondent pas à votre modèle de données 1: 1, le DAL devrait faire toute la conversion.

A propos de lier votre DAL à la substance dans le BLL, je pense que vous devriez vous soucier de l'autre sens, attacher votre BLL à votre DAL. J'utiliser une interface pour représenter votre DAL (comme dans IRepository) cette façon, vous pouvez faire votre BLL appeler une sorte de mécanisme de persistence juste en changeant le type de IRepository qu'il utilise (des points supplémentaires si vous utilisez IoC: P). Les classes concrètes qui mettent en œuvre les IRepository seraient liés aux objets métier, mais ils doivent savoir ce qui est ce qu'ils économisent non? tandis que le BLL ne pas savoir ce qui est en train de faire l'économie.

Pour passer l'objet métier dans la DAL est la plus simple et méthode la plus rapide. Il travaille dans de petits projets, mais ont les mêmes inconvénients:

1) Business Objects font partie de la couche BLL, et si vous passez des objets dans BLL puis DAL devient dépendante de BLL. couche à faible connaît un haut -. Cela contredit l'idée de couches du tout

2) Business Object sont usially très complexe pour l'enregistrer directement dans BD. Dans ce cas, il est préférable d'introduire une nouvelle couche intermédiaire « cartographes ».

Pour surmonter tous ces problèmes que je fais usially interface indépendante DAL Business Objects. J'utilise des classes « de ligne » au lieu - représentation d'un enregistrement dans la base de données ou XML. Dans .NET 3.5 cours LinqToSql autogénéré peuvent être utilisés à cet effet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top