Je suis en train d'apprendre le DDD (Eric Evans livre est ouvert en face de moi) et j'ai rencontré un problème que je ne peux pas trouver une réponse. Que faites-vous dans DDD, quand vous êtes juste essayer d'obtenir une simple liste de recherche les enregistrements?
Ex.
EmployeeID: 123
EmployeeName: John Doe
État: Alaska (liste déroulante)
Comté: Wasilla (liste déroulante -- seront filtrés en fonction de l'état).
Par exemple, disons que vous avez un Employé de domaine objet, un IEmployeeRepository interface et un EmployeeRepository classe. Il sera utilisé par une INTERFACE utilisateur pour afficher une liste des employés et les détails individuels. Dans l'INTERFACE utilisateur, vous souhaitez utiliser une liste déroulante pour l'Etat et la région où vit l'employé. La Disposition des comtés seront filtrés en fonction de l'état qui a été choisi.
Malheureusement, les tables de base de données et l'INTERFACE utilisateur sont très différentes. Dans tblEmployees, il contient le Code de l'État=AK et le Comté de Code=02130, pas de l'État et du Comté de Noms.
À l'ancienne (avant que j'ai commencé cette DDD quête) serait assez simple, il suffit de créer 2 requêtes et l'utilisation d'un DataReader pour remplir les menus déroulants. En dessous de l'écran dans le menu déroulant " est la valeur, qui est automatiquement utilisé dans la forme de messages.
Avec DDD, si je ne suis pas sûr de savoir comment vous êtes censé le faire. J'ai d'abord commencé par la création de l'État et le Comté d'objets référentiels et des interfaces pour les dépôts. Toutefois, l'écriture 4 classes + 2 interfaces et de la plomberie dans la hbm.xml les fichiers de + Employé Business objects semble exagéré, juste 2 requêtes pour 2 menus déroulants. Il y a une meilleure façon, n'est-ce pas? Je ne suis pas en changeant les dossiers dans l'État ou du Comté de tables de si tôt et même si je l'ai fait, il ne serait pas grâce à cette application. Donc je n'ai pas vraiment envie de créer des objets métier de l'État et du Comté si je n'ai pas d'.
La solution la plus simple que je vois, c'est de créer un helper classe avec des méthodes qui retournent des dictionnaires, comme GetStatesAll(), GetState() et GetCounties() et GetCounty(), mais qui se sent juste mal un DDD point de vue.
S'il vous plaît aider. Comment puis-je utiliser DDD sans overengineering juste un couple de simples recherches?
La Solution Finale Je pense que j'ai finalement trouvé ma réponse grâce à l'expérience, qui était de mettre le GetStates() la méthode dans son propre Accès aux Données de la classe, mais pas une classe de référentiel. Depuis que je ne faisais que l'accès en lecture seule, je l'ai jeté dans une struct DTO. Depuis la base de données était petite, j'ai jeté au total dans une classe unique, comme Todd décrit ci-dessous.
Mes conclusions:
- Les tables de recherche ne sont JAMAIS des objets de valeur, parce que les tables de recherche de TOUJOURS avoir une identité. Si ils n'ont pas d'identité, vous finiriez par avoir des doublons, ce qui ne serait pas beaucoup de sens.
- Lecture seule table de recherche peut avoir un référentiel, mais sans doute n'en a pas besoin. L'objectif d'un référentiel est de réduire la complexité en forçant l'accès uniquement par le biais de l'agrégat. En passant par le total vous offre un moyen de s'assurer que les règles de gestion peuvent être appliquées, comme par exemple l'ajout de pneus si vous n'avez pas de voiture.
- Si vous le permettez CRUD de maintenance sur la table de recherche, alors il est logique pour la table de recherche à disposer de son propre référentiel.
- Le fait que j'ai fini par ranger les codes de structs ne fait pas d'eux "types de valeur". Fowler dit dans POEAA qu'une structure est un type de valeur. C'est vrai, les structures sont immuables, c'est pourquoi Fowler dit qu'ils sont des "types de valeur", cependant, j'ai été de les utiliser différemment. J'ai été en utilisant les structures comme un moyen léger de passer autour des Otd que je n'ai pas de plan sur la modification de l'après leur création. En vérité, les structures que j'ai utilisé n'a, en effet, ont des identités, mais parce qu'ils étaient en lecture seule, ils ont travaillé comme des structures.
- Un modèle que j'ai utilisé et que je ne vois pas beaucoup d'ailleurs, est de faire des champs de clé primaire être immuable. Ils sont définis par le constructeur, mais ils sont en lecture seule (pas privé accesseurs) et ne peut être modifié une fois que l'objet est créé.