Методы внедрения зависимостей в модель предметной области - PullRequest
4 голосов
/ 28 июля 2010

У меня есть тип модели домена.Одно из его многочисленных свойств требует, чтобы ITranslationService предоставлял возможность переводить возвращаемое значение на соответствующий язык.

Должен ли я внедрить ITranslationService в конструктор типа модели предметной области (таким образом, приходится изменять везде, где тип являетсясоздание экземпляра и необходимость заботиться об инициализации при получении через NhIbernate), даже если он используется крошечной частью типа (одно из многих свойств);или есть другой функциональный шаблон, который я могу использовать?

У кого-нибудь есть опыт, которым он может поделиться?

Ответы [ 2 ]

4 голосов
/ 28 июля 2010

Я бы не ожидал, что объект домена будет выполнять перевод - вместо этого используйте службу перевода с объектом домена (или соответствующим значением свойства) в качестве параметра и верните переведенное значение. Например, вы можете просто сделать

var translatedString = yourServiceInstance.Translate(theDomainObject.Property);
1 голос
/ 28 июля 2010

Должен ли я внедрить ITranslationService в конструктор типа модели домена

Да, может иметь смысл в зависимости от вашей ситуации.Если вы всегда будете избегать внедрения сервисов в сущности, то это может привести к модели анемичного домена , которая является анти-паттерном.

Код, который должен создавать экземпляры сущностей, может быть защищен отдополнительный аргумент конструктора с использованием фабрики, которая заботится о внедрении зависимостей.

NHibernate также может внедрять сервисы в сущность через конструктор: http://fabiomaulo.blogspot.com/2008/11/entities-behavior-injection.html

...