首页 新闻 会员 周边

如何把asp.net mvc 的Controller和view分离且每个业务模块对应一个controller项目呢

0
悬赏园豆:50 [已解决问题] 解决于 2014-07-31 17:15

对于大型项目设计,一般不会把controller和view放在一个项目下,mvc支持controler和view分离为两个独立的类库,那如何再把controller按业务模块分多个类库呢,这样的话,怎么写路由路径,能按命名空间寻找不同类库下的Controller和Action,求园子里的高手们指点。

aadoudou的主页 aadoudou | 初学一级 | 园豆:157
提问于:2014-05-08 16:39
< >
分享
最佳答案
0

一般大点的项目都会以areas为一个项目,分离出来的controller做为一个独立的类库,只需要在路由里配置使用哪一个controller就行了,

context.MapRoute(
"Plan_default",
"Plan/{controller}/{action}/{id}",
new { action = "PlanIndex", id = UrlParameter.Optional },
namespaces: new string[] { "PlanManager.Controllers" }
);

收获园豆:50
cenlo | 小虾三级 |园豆:583 | 2014-05-08 17:57

能否分为多个类库呢,areas方式还是最终编译为一个dll,能否按业务模块划分controller为多个dll呢。如果不能再划分,controller作为一个独立的类库,那一般在controller中编写业务逻辑呢,还是业务逻辑再独立划分呢。

aadoudou | 园豆:157 (初学一级) | 2014-05-08 20:34

@zhangbo: 分库这个东西你想分几个就可以分几个的,controller与业务逻辑是分开的。controller只负责调度一般的项目结构是这样的:view->controller->logic->model->dataaccess

cenlo | 园豆:583 (小虾三级) | 2014-05-09 09:33
其他回答(3)
0

楼上说的是,可以分区域areas  添加一个区域来划分

开山怪不怪 | 园豆:544 (小虾三级) | 2014-05-08 18:08
0

完全可以,我现在公司的项目都是这么搞的。只要类库引用,并且路径对应上就可以了,跟没有分成多个类库是一样的操作。

悟行 | 园豆:12559 (专家六级) | 2014-05-08 23:05

那再请教下,在web页面项目里的Application_Start()里怎么注册多个controller类库的路由呢。

支持(0) 反对(0) aadoudou | 园豆:157 (初学一级) | 2014-05-09 08:30

@zhangbo: 注册路由有什么关系?web项目最终是要把所有controller生成的dll都引用进来了

支持(0) 反对(0) Devin Mao | 园豆:596 (小虾三级) | 2014-05-09 10:04

@Devin Mao: 请教大侠,如果每个controller的命名空间不一样,web网址是如何知道去找哪个dll下的controller呢,我想说的是能不能通过访问是这个命名空间的标识的网址,就直接去相应的dll里解析controller呢。

支持(0) 反对(0) aadoudou | 园豆:157 (初学一级) | 2014-05-09 13:44
0
  routes.MapRoute(
               "Home",
               "Home.aspx",
               new { controller = "Main", action = "Main" }
            );

routes.MapRoute("UserDomain_Contact_Home",
               "u/{UserDomainName}/Contact.aspx",
               new { controller = "Contact", action = "ShowLinkMan" }
               );
routes.MapRoute(
                          "UserDomain_Driver_Home",
                          "u/{UserDomainName}/Driver.aspx",
                           new { controller = "Driver", action = "ShowList" }
                           );

这里有几个注册例句;controller都在不同的项目里;命名空间也不一样
MVC会搜索所有:IController的

Devin Mao | 园豆:596 (小虾三级) | 2014-05-09 13:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册