使用unity将业务逻辑层与数据访问层分离

时间:2010-06-19 03:18:09

标签: asp.net-mvc-2 data-access-layer business-logic

我在Asp.Net MVC2项目中实现了Unity。我目前正在Application Start上注册我的BLL类型。

然后我创建了一个名为UnityControllerFactory的类,负责解析我的控制器中的依赖项。我只是使用Property注入来通过使用依赖属性来完成此任务。

我的下一个想法是删除我的BLL类中包含的依赖项,这些依赖项与DAL层类的具体实现相关联。我还希望能够通过Property注入而不是构造函数注入来实现这一点,因为我在我的Bll类方法中引用了多个类。

我希望能找到解决这个问题的解决方案的一些指导,或者这完全是过度的?

1 个答案:

答案 0 :(得分:2)

如果您的BLL类是由Unity创建的,那么它不会成为问题,容器只会在创建BLL类时提供所需的依赖项。如果它们不是,那么你将遇到一个问题,只是因为一般来说,创建BLL类的对象也应该提供它的依赖。

我想提醒您使用基于物业的注射。依赖注入世界中的一般经验法则是必需的依赖项应该通过构造函数注入,而可选的依赖项应该通过属性注入。如果你的类需要另一个类才能完成它的工作,那么在没有所需的依赖项的情况下也不应该有任何方法来创建类的实例。

由于BLL类中的依赖项数量,您提到使用Property注入。虽然我理解这一点,但我认为遵循required = constructor规则仍然至关重要。如果你最终得到一个具有太多依赖关系的构造函数,那么这就是代码气味,它指向设计中的某个问题。可能是该类承担了太多的责任(如果您发现某些方法需要一组依赖项,而另一组需要不同的集合,则通常就是这种情况)。也可能是依赖关系的工作过于细化,可以包含在另一个可以协调依赖类工作的对象中。