2010-07-28 5 views
3

I ont un type de modèle de domaine. L'une de ses nombreuses propriétés nécessite un ITranslationService pour fournir la possibilité de traduire sa valeur de retour dans le langage approprié. Dois-je injecter le ITranslationService dans le constructeur du type de modèle de domaine (ce qui oblige à modifier partout le type est instancié et doit être concerné par l'initialisation lorsqu'il est récupéré via NhIbernate), même s'il est utilisé par une infime partie de le type (une des nombreuses propriétés); ou existe-t-il un autre modèle fonctionnel que je peux utiliser?techniques pour l'injection de dépendance dans un modèle de domaine

Quelqu'un at-il une expérience pertinente qu'ils peuvent partager?

+0

check http://techblog.bozho.net/?p=180 – Bozho

Répondre

0

Dois-je injecter le ITranslationService dans le constructeur du modèle de domaine de type

Oui, ce peut du sens, en fonction de votre situation . Si vous toujours éviter l'injection de services en entités, alors cela pourrait conduire à une anemic domain model qui est un anti-modèle.

code

qui doit instancier des entités peut être protégé contre l'argument du constructeur supplémentaire à l'aide d'une usine, qui prend en charge l'injection de dépendance.

NHibernate peut aussi injecter des services dans une entité par le constructeur: http://fabiomaulo.blogspot.com/2008/11/entities-behavior-injection.html

+0

Merci. En fin de compte, j'ai supprimé la dépendance de Tomas, mais j'ai aimé votre discussion d'usine. – Ben

4

je ne voudrais pas attendre l'objet de domaine faire la traduction - au lieu, utiliser le service de traduction avec l'objet de domaine (ou la valeur de la propriété concernée) en tant que paramètre, et renvoie la valeur traduit. Par exemple, vous pouvez simplement faire

var translatedString = yourServiceInstance.Translate(theDomainObject.Property); 
+0

+1 Cela vaut mieux. L'autre conception ressemble à une violation de la SRP. –

+0

Ma compréhension de votre réponse est que vous vous déplacez la dépendance du translationservice au client de la méthode? Votre code ressemble exactement au code de la propriété tel quel. Mon problème est de fournir la dépendance. Une possibilité pourrait être d'injecter le service de traduction dans une nouvelle méthode d'accès. Est-il facile d'exposer les paires de méthodes accesseur/mutator comme des propriétés nhibernate? ... Je me sens hors de ma profondeur – Ben

+0

@Ben: Oui, déplacez la dépendance à l'objet qui utilise l'objet domaine, plutôt que de l'avoir dans l'objet lui-même. J'imagine que le code ci-dessus soit dans une action de contrôleur, ou une vue, s'il s'agissait d'une application Web ASP.NET MVC. L'objectif avec ceci est de faire en sorte que vos objets de domaine contiennent uniquement des données, alors que quelqu'un d'autre est responsable du traitement de ces données. –

Questions connexes