Nous travaillons sur un nouveau projet (réécriture de l'application existante) et je rencontre des problèmes avec mon modèle de domaine / conception de référentiel de domaine.
Voici une version (simplifiée) de deux portions clés de notre Modèle de domaine: p>
p>
Comme vous pouvez le constater, J'ai un concept abstrait d'un poteau i avoir un concept abstrait d'un emplacement Maintenant, cela me considérait naturellement comme deux racines agrégées claires. p> J'ai donc créé deux référentiels, on a appelé Postrepository Strong>, et un autre appelé LocationRepository STRY>. P> Tout allait bien, je peux ajouter / Obtenez n'importe quel type de message (ou commenter) et ajoutez / obtenez n'importe quel type d'emplacement via l'un de ces deux référentiels. p> mais maintenant im dans le scénario d'une "page d'atterrissage" F Ou une ville (par exemple). P> sur cette page, j'ai besoin de montrer essentiellement "tous les messages de cet emplacement". P> Comment est-ce défini? Eh bien, un message peut être (éventuellement) étiqueté à un endroit. Détail de la mise en œuvre, donc je ne veux pas aller trop profondément dans les données (comme ce n'est pas ce que DDD est à peu près), mais il y a essentiellement une intelligence géospatiale pour savoir quels postes sont contenus dans un endroit particulier par le fichier de forme de l'emplacement, et la latitude / longitude du poste tagué. P> Mais comment puis-je récupérer ces informations sans traverser les limites? P> Quel référentiel dois-je utiliser? Est-ce que j'en ai besoin d'un nouveau? P> Si cela importe (ou pour le curieux), il s'agit d'une application Web (ASP.NET MVC), avec une base de données SQL Server 2008 de la base de données et de l'entité 4.0. P > Si vous avez besoin de clarification, faites le moi savoir. p> Nous utilisons actuellement une version modifiée du modèle de spécification afin de récupérer des modèles de domaine. P> Par exemple, cette est le code de notre BLL pour récupérer tous les examens où score> = 4: p> mais maintenant j'ai besoin de code comme celui-ci: p> var reviews = postRepository
.Find()
.OfType<Review>()
.Where( //lat long, or Locations FK )
.ToList();
3 Réponses :
Disons que vous utilisiez le modèle de spécification, pourriez-vous créer une spécification de poste à l'aide d'un objet de localisation? Ensuite, vous venez de transmettre la spécification à votre référentiel de poste et récupérez le résultat. P>
Hmm, jamais entendu parler du "modèle de critère". Ou faites-vous référence au modèle de spécification? (Nous utilisons une version modifiée de celle-ci - VIA C # Expressions)
@ RPM1984 Pourriez-vous poster cette approche "modèle de spécification modifiée" sur la pâtebine / gist et laisser tomber le lien ici? Je sens quelque chose d'intéressant.
@ RPM1984: C'est pourquoi je ne pouvais pas le trouver sur Google! :) Oui, c'est ce que je voulais dire.
@Arnis L. - Bon de vous voir, aurons-nous une autre discussion de DDD chauffée? Je rigole. :) En fait, je viens de regarder une vidéo de NDC sur 7 raisons pour lesquelles les projets DDD échouent et ont soufflé mon esprit. Pas beaucoup à ce code, je n'ai pas "trouvé" itherwhere - Icollection publique
C'est une méthode sur le service de domaine (AKA postservices) pouvant être utilisée comme ceci: var critiques = _Postservice.findall
générique
. Où code>.
@ RPM1984 Vous savez déjà - je n'aime pas cette approche. BTW, vérifiez ce que CQRS est tout à propos. Cela vous bloquera encore plus. Juste "N'essayez pas ça à la maison" (sur un vrai projet) à moins que vous ne soyez vraiment à l'aise avec elle. :) Bit.ly/3H2WAQ
@Arnis L - Merci pour les liens, oui j'en entendu parler, mais honnêtement, il est assez complet. Je pense que notre projet tombe dans la catégorie "DDD-Lite". Nous ne voulons pas vraiment séparer notre architecture dans des requêtes / commandes, quand c'est une application aussi simple en premier lieu. Je pouvais voir l'avantage dans d'autres architectures (N-Tier par exemple).
@ RPM1984 sur "DDD-LITE" Je pense que vous avez raison. @ Travail, les gars à côté de moi faire exactement la même chose. Mais je pense que c'est mieux que "Static Web modèle". Bit.ly/6FW1AK à propos de CQRS, chose est un exercice vraiment bon esprit. Lorsque vous comprenez des choses complexes, les moins complexes deviennent simples.
Je voudrais lier la poste à l'emplacement au moment de la création afin que, pour chaque emplacement, je puisse obtenir (via un référentiel) une liste des postes associés. Il ressemblerait à ceci:
Création: p> récupération: p> sous la hotte, l'association entre Les postes et l'emplacement seraient mis en œuvre comme une relation de table nombreux à plusieurs. Il y a un problème avec cette solution: l'ajout d'un nouvel emplacement nécessite de numériser tous les messages et de les assigner au nouvel emplacement (le cas échéant). P> espère que cela aide. P> p>
+1, j'aime ça. Je vais essayer de tenter quand je vais au bureau et je vous ferai savoir comment je me trompe. Acclamations. :)
Je suis allé avec une version modifiée de cette solution. Votre solution globale me met dans la bonne direction, acclamations.
+1 - bonne réponse. Pour l'OP, même s'il est un peu tardif, votre modèle convient au format classique de "forum de discussion", si vous pensez à un emplacement étant le "forum" et le post étant lui-même. Vous trouverez que cela constituera un modèle très courant lorsqu'il s'agit de relations globales et de relations un à plusieurs et plusieurs à plusieurs.
Pourquoi est-ce un problème? Selon Evans dans son livre, une AR peut très bien réfuter une autre ar. (Vous ne pouvez cependant pas faire référence à un élément enfant dans une AR d'une autre ar) p>
Aussi, les emplacements sont-ils vraiment des racines d'agrégats? La définition d'une racine globale est qu'elle agit comme une limite de la concision. Est-ce que cela correspond à la définition d'un emplacement? Je dirais qu'un emplacement est un objet de valeur. P>
Il y a à peu près deux camps ici concernant les référentiels et les associations AR: p>
Un qui dit que toutes les racines globales doivent être extraites em> à l'aide de leur référentiel respectif et que AR devrait utiliser des relations meubles, par exemple des identifiants entre eux P>
Et un qui dit que les racines agrégées peuvent très bien aller chercher d'autres racines agrégées associées et qu'un référentiel est simplement un moyen de trouver des racines agrégées. P>
HMM, objet de valeur de point intéressé. Mais les emplacements ont toutes une identité (emplacement), et ils ont aussi une latitude / longitude, qui est également unique. Mais là encore, ils sont immuables, alors peut-être qu'ils sont des objets de valeur.