对于大型项目设计,一般不会把controller和view放在一个项目下,mvc支持controler和view分离为两个独立的类库,那如何再把controller按业务模块分多个类库呢,这样的话,怎么写路由路径,能按命名空间寻找不同类库下的Controller和Action,求园子里的高手们指点。
一般大点的项目都会以areas为一个项目,分离出来的controller做为一个独立的类库,只需要在路由里配置使用哪一个controller就行了,
context.MapRoute(
"Plan_default",
"Plan/{controller}/{action}/{id}",
new { action = "PlanIndex", id = UrlParameter.Optional },
namespaces: new string[] { "PlanManager.Controllers" }
);
能否分为多个类库呢,areas方式还是最终编译为一个dll,能否按业务模块划分controller为多个dll呢。如果不能再划分,controller作为一个独立的类库,那一般在controller中编写业务逻辑呢,还是业务逻辑再独立划分呢。
@zhangbo: 分库这个东西你想分几个就可以分几个的,controller与业务逻辑是分开的。controller只负责调度一般的项目结构是这样的:view->controller->logic->model->dataaccess
楼上说的是,可以分区域areas 添加一个区域来划分
完全可以,我现在公司的项目都是这么搞的。只要类库引用,并且路径对应上就可以了,跟没有分成多个类库是一样的操作。
那再请教下,在web页面项目里的Application_Start()里怎么注册多个controller类库的路由呢。
@zhangbo: 注册路由有什么关系?web项目最终是要把所有controller生成的dll都引用进来了
@Devin Mao: 请教大侠,如果每个controller的命名空间不一样,web网址是如何知道去找哪个dll下的controller呢,我想说的是能不能通过访问是这个命名空间的标识的网址,就直接去相应的dll里解析controller呢。
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的