2010-07-28 2 views
3

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

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

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

+0

проверка http://techblog.bozho.net/?p=180 – Bozho

ответ

0

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

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

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

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

+0

Спасибо. В конце концов я удалил зависимость cf Tomas, но мне понравилась ваша фабричная дискуссия. – Ben

4

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

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

+1 Это лучше. Другой дизайн звучит как нарушение SRP. –

+0

Мое понимание вашего ответа заключается в том, что вы перемещаете зависимость от службы переводов к клиенту метода? Ваш код выглядит точно так же, как и код в свойстве as-is. Моя проблема заключается в обеспечении зависимости. Одна из возможностей может заключаться в том, чтобы внедрить переводную службу в новый метод доступа. Легко ли раскрывать пары методов доступа/мутатора как свойства nhibernate? ... Я чувствую себя из глубины – Ben

+0

@Ben: Да, переместите зависимость с объектом, который использует объект домена, вместо того, чтобы иметь его в самом объекте. Я бы предположил, что вышеуказанный код был в действии контроллера или в представлении, если это было веб-приложение ASP.NET MVC. Цель состоит в том, чтобы сделать ваши объекты домена просто хранящими данные, а кто-то другой отвечает за обработку этих данных. –

Смежные вопросы