我有一个域模型类型。它的众多属性之一需要 ITranslationService 提供将其返回值翻译成适当语言的能力。
我是否应该将 ITranslationService 注入到域模型类型的构造函数中(因此必须在任何地方更改类型被实例化并且在通过 NhIbernate 检索时必须关注初始化),即使它被类型的一小部分使用(一个许多属性);还是我可以使用另一种功能模式?
有没有人有相关经验可以分享?
我有一个域模型类型。它的众多属性之一需要 ITranslationService 提供将其返回值翻译成适当语言的能力。
我是否应该将 ITranslationService 注入到域模型类型的构造函数中(因此必须在任何地方更改类型被实例化并且在通过 NhIbernate 检索时必须关注初始化),即使它被类型的一小部分使用(一个许多属性);还是我可以使用另一种功能模式?
有没有人有相关经验可以分享?
我不希望域对象进行翻译 - 相反,使用域对象(或相关属性值)作为参数的翻译服务,并返回翻译后的值。例如,你可以简单地做
var translatedString = yourServiceInstance.Translate(theDomainObject.Property);
我应该将 ITranslationService 注入到域模型类型的构造函数中吗
是的,这可能是有道理的,具体取决于您的情况。如果您总是避免将服务注入实体,那么这可能会导致贫血的领域模型,这是一种反模式。
需要实例化实体的代码可以通过使用工厂来屏蔽额外的构造函数参数,该工厂负责依赖注入。
NHibernate 还可以通过构造函数将服务注入实体:http: //fabiomaulo.blogspot.com/2008/11/entities-behavior-injection.html