WebForm模式开发,我们通常用多层框架,比如访问数据库,我们三层代码框架一般是这样:
BLL->IDAL->DAL->数据库
就是BLL调用IDAL接口层,IDAL通过工厂去调用DAL层实现接口,然后DAL层则去访问数据库
但是在ASP.NET MVC中,我看了几个开源项目:
1、Oxite(微软开源的,基于MVC开发的CMS系统)
2、NerdDinner (MVC源码)配套电子教程
3、Suteki.Shop
发现他们有几个特点:
特点1、他们都是通过 Controller->IRepository->Repository来调用数据的,有的是 Controller->IServices->Services->IRepository->Repository 的方式调用,只不过在Controller和Repository之间加了Services层。
特点2、他们把读取数据的和数据实体层都放在Models中,或和Models放一起
特点3、三个项目全用的Linq to SQL,而不是用ADO.NET
我的问题是:
1、“BLL->IDAL->DAL->数据库” 和 “Controller->IServices->Services->IRepository->Repository->数据库” 官方是不是推荐在MVC中使用后者?
2、如果使用后者是在MVC中被推荐的,这两种方式的区别在哪?因为我觉得IServices和IRepository接口中定义的接口方法几乎是一样的,那干嘛还要多搞一层,加个IServices干什么呢?
请牛人们指点小弟,在此,先谢!
Controller其实还是属于UI层,Service负责业务逻辑的处理,与BLL对应,Repository负责数据库访问,与DAL对应。
你在使用“BLL->IDAL->DAL->数据库”这种方式时,BLL中定义的接口方法不也是和DAL中定义的接口方法是一样的吗?这里为什么多出一层呢?
BLL也好Service也好,其实都是对业务逻辑的封装,在简单业务逻辑中,可能就起到一个方法传递的作用。但是在处理复杂逻辑时,他们的职责就可以得到更好的体现了。
对于问题一,官方应该没有明确的推荐,只是目前社区比较倾向于在数据库访问时使用Repository模式,而处于SOA的考虑,业务逻辑往往使用Service来命名。
以上是个人理解。
体系架构
企业型
MVC->BLL->IDAL->DAL->数据库
WebForm->BLL->IDAL->DAL->数据库
WinForm->BLL->IDAL->DAL->数据库
控制台->BLL->IDAL->DAL->数据库
服务型
MVC->IServices->Services->IRepository->Repository-> LinQ->数据库
WebForm->IServices->Services->IRepository->Repository-> LinQ->数据库
WinForm->IServices->Services->IRepository->Repository-> LinQ->数据库
控制台->IServices->Services->IRepository->Repository-> LinQ->数据库
这样应该明白吧
mvc是asp.net的ui开发框架,于之对立的是WebForm
在系统设计中,层与层之间一般不采用直接提供服务的形式,而是抽象出接口层提供服务。Controller->IServices->Services,Services抽象出IServices层,Services->IRepository->Repository,Repository抽象出IRepository层,这样做的好处是减少层与层之间的耦合性,也就是高内聚,低耦合。
本人觉得大型系统不合适采用MVC类似的架构去做,因为大型系统涉及到的table list会很多,如果用你所说的Controller->IServices->Services->IRepository->Repository->数据库,给人的感觉有点过度设计了,会给系统以后的维护带来很多困难
怎么使用方便就怎么用呗, 什么模式框架主要就是用来加快开发效率
凭经验想怎么用怎么用,他们给的只是参考。