Ce site m'a fourni de nombreuses réponses utiles, mais après une recherche d'une heure, je n'ai rien trouvé qui réponde spécifiquement à mes besoins. Alors voilà ...Objets métier et couche de données
La société pour laquelle je travaille est en train de concevoir un nouveau calque Business Objects et un calque d'accès aux données - ceux-ci se trouveront dans des assemblages séparés. Le problème est que j'ai de la difficulté à comprendre l'interaction entre ces deux couches. En particulier, si le DAL connaissait le BOL, j'ai lu de nombreux articles qui ont dit que l'ordre de dépendance devrait aller quelque chose comme ceci:
GUI/Présentation -> BOL ---> DAL
Mais pour autant que je peux voir, le DAL a besoin d'une référence au BOL afin de pouvoir les objets « de retour » à la couche BOL. Je vais pour un assemblage intermédiaire entre le BOL et DAL qui sera fondamentalement une couche mince remplie d'interfaces pour découpler ces deux DLL, de sorte que le cadre peut utiliser différents DAL si le besoin s'en fait sentir. Ceci m'amène à l'idée d'introduire une autre couche mince avec un tas d'interfaces implémentées par les BO, puis quand la BOL appelle l'interface DAL, elle lui passe un objet qui implémente une de ces interfaces BO puis la DAL procède à remplir l'objet. Cela supprime toutes les dépendances entre le BOL et le DAL - cependant, j'ai du mal à le justifier pour être honnête. Idéalement, nous aimerions utiliser un ORM car il supprime simplement la nécessité d'écrire des choses CRUD mais nos clients ont l'habitude de jouer avec les longueurs de colonne sur leur base de données et c'est la cause de la plupart de nos erreurs à ce jour en utilisant les DataTables fortement typés. J'ai entendu dire que Linq2SQL stocke aussi les longueurs de colonnes au moment de la compilation, pas sûr que NHibernate le fasse ou non (mais je ne suis pas sûr que notre schéma de base de données soit assez bien conçu pour NHibernate, les pièges des anciens systèmes). Donc, tout aperçu sur la relation entre un BOL et un DAL serait très bienvenue - excuses si ce qui précède est mal écrit, si quelqu'un a besoin de clarification, je serai heureux de fournir plus de détails.
Marlon