首页 新闻 会员 周边

关于项目中用Ioc,项目结构组织的问题

0
悬赏园豆:40 [已解决问题] 解决于 2012-04-10 18:53

假设MVC项目中需要用Ioc框架(如Unity),据说这样可以实现解耦。

以数据层(DAL)来说,Ioc在Global文件中注入时,表现层(UI)需要引用数据层接口(IDAL),还需要引用数据层(DAL),这怎么又解耦了呢?

以业务层(BLL)来说,Ioc在Global文件中注入时,表现层(UI)需要引用业务层接口(IBLL),还需要引用业务层(BLL),这怎么又解耦了呢?

我的想法是 UI只需要引入IBLL就行了,不需要其他的DAL IDAL BLL什么的,但是Global文件注册时需要IDAL DAL IBLL BLL这些东西,在Ioc的前提下我该如何组织这些东西呢?

求指教在这些情况下如何组织项目结构。

Kratos Zhang的主页 Kratos Zhang | 初学一级 | 园豆:6
提问于:2012-03-07 08:20
< >
分享
最佳答案
1

将IoC注册代码移至一个独立的项目中。

我写过一篇ASP.NET MVC中使用IoC的博客:想爱容易,相处难:当ASP.NET MVC爱上IoC

我们现在就是在CNBlogs.BootStrapper项目中进行所有IoC注册,这样其他项目只需要依赖接口,不依赖实现。

dudu | 高人七级 |园豆:30994 | 2012-03-07 13:56

我现在的情况是MVC表现层引用了DAL类库 IDAL接口类库  BLL类库  IBLL接口类库,感觉这样非但没有解耦,耦合反而更大了,配置文件这么写的

<unity>
<containers>
<container>
<register type="TreeDemo.IService.IMenuService,TreeDemo.IService" mapTo="TreeDemo.Service.MenuService,TreeDemo.Service"/>
<register type="TreeDemo.IDal.IMenuDal,TreeDemo.IDal" mapTo="TreeDemo.Dal.MenuDal,TreeDemo.Dal"/>
</container>
</containers>
</unity>

不引用就会提示找不到程序集,郁闷啊。。求一个组织方式,你能否讲具体点呢?

Kratos Zhang | 园豆:6 (初学一级) | 2012-03-07 18:50

我试了下,在一个新的类库(Test)中引用DAL IDAL BLL IBLL,然后Web层去引用Test类库,这样确实可以实现,那要是我DAL层要换实现的方式了,那Test类库还要去引用新的DAL,那不还是没解耦么?

Kratos Zhang | 园豆:6 (初学一级) | 2012-03-07 19:02
其他回答(3)
0

原来这么写就怎么写,然后再配置IOC,没必要为了IOC去改变你或团队现有的习惯,学习成本会增加的,项目风险也高了

az235 | 园豆:8483 (大侠五级) | 2012-03-07 08:34
1

应该是不需要引入实现层,写到配置文件,然后用反射来实例化?

OOLi | 园豆:163 (初学一级) | 2012-03-07 08:48
0

以前当没使用ioc的时候,我们如果想要对象,是不是直接new出来,或者反射来的(当然ioc还是利用了反射哈)?

1 当使用ioc,我们只需要配置好,直接在配置文件中修改,这样有益于扩展,不会去修改源码;

2 new出来的,就固定在,使用ioc是当需要才注入,不需要就不存在对象;

希望有帮助哈,个人理解,先不谈层次,之谈ioc

收获园豆:40
莫小鱼 | 园豆:245 (菜鸟二级) | 2012-03-07 13:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册