我想知道如何告诉NHibernate解决我的POCO域对象的依赖关系.
我发现像CalculateOrderTax这样的方法应该在Domain对象中,因为它们编码特定于域的业务规则.但是,一旦我有两个违反SRP的话.
将这些方法提取到Strategy类是没有问题的,但我想知道如何使NHibernate加载它们.
在将对象移交给更高层之前,循环访问存储库中的对象列表以进行基于Dependecy注入的获取/设置似乎不是一个好的解决方案.
我现在也在使用Castle Windsor进行Depency注射.
我正在构建一个ASP.NET MVC应用程序,它使用DDD(域驱动设计)方法,由NHibernate处理数据库访问.我有域模型类(管理员),我想通过一个IOC容器,如Castle Windsor注入依赖,如下所示:
public class Administrator
{
public virtual int Id { get; set; }
//.. snip ..//
public virtual string HashedPassword { get; protected set; }
public void SetPassword(string plainTextPassword)
{
IHashingService hasher = IocContainer.Resolve<IHashingService>();
this.HashedPassword = hasher.Hash(plainTextPassword);
}
}
Run Code Online (Sandbox Code Playgroud)
我基本上想要为SetPassword方法注入IHashingService而不直接调用IOC容器(因为这被认为是IOC反模式).但我不知道如何去做.我的Administrator对象要么通过实例化,new Administrator();要么通过NHibernate加载,那么我如何将IHashingService注入Administrator类?
再想一想,我是否正确地走这条路?我希望避免让我的代码库乱丢......
currentAdmin.Password = HashUtils.Hash(password, Algorithm.Sha512);
Run Code Online (Sandbox Code Playgroud)
...而是让域模型本身处理哈希并巧妙地将其封装起来.我可以设想另一个开发人员意外地选择了错误的算法,并且有一些密码为Sha512,有些是MD5,有些有一个盐,有些有不同的盐等等.相反,如果开发人员正在写...
currentAdmin.SetPassword(password);
Run Code Online (Sandbox Code Playgroud)
...然后那会隐藏这些细节并处理上面列出的那些问题不是吗?
nhibernate asp.net-mvc castle-windsor ioc-container inversion-of-control