2014-01-22 144 views
18

ASP MVC 5有一个叫做属性路由的新路由。我看到它的方式,现在路由分散在每个控制器上,与基于约定的路由器不同,它有一个单独的位置RouteConfig.cs,您可以在其中检查路由,这也可用作站点路由的文档。ASP MVC 5属性路由VS.基于约定的路由

我的问题是在可读性和可维护性方面使用基于约定的路由的属性路由更好吗?有人可以建议如何设计路线以获得更好的可维护性和可读性。

回答

0

属性路由为您提供了更多广告路由选项。

退房如下:Routing explanations

+0

那文章我读过,是属性路由让你更简洁的路由。但如果它会导致更易维护的代码,我不介意做更多的击键。我想知道是否有另一种方法来实现这些属性,或者比基于约定的方式更好。 –

21

为了解决第一个问题,分散路由具有许多优点:

  1. 它把相邻对实现该路由控制器动作的路由信息​​。这有助于调试和排除故障,并提供快速搜索解决方案中路线信息的功能。

  2. 它降低了对路线进行更改的过程中的风险。在RouteConfig.cs或WebApiConfig.cs(对于Web API解决方案)中,可能存在无意中更改错误路线或对应用程序的其他部分造成不利影响的可能性。

  3. 您可能还希望包含可接受的HTTP方法,允许的用户类型和注册优先级,如果包含在基于属性的路由中,则将所有这些信息放在一起。

这篇文章提供了上述灵感和加强对我来说,和进入更多细节:http://kevinmontrose.com/2011/07/25/why-i-love-attribute-based-routing/

+0

谢谢,路易斯。凯文蒙特罗斯的背书足以证明这一点。 –

1

您可以单元测试傻冒航线使用传统的路由时,你也有一个“分离 - 的担忧“。

不能说属性路由。

对于一个大型项目,我会用传统的方式去做,因为小项目属性路由不是很好。

+1

友好的网址怎么样?可以在每个控制器动作上添加路由以更好地控制网址吗?基本上它和属性路由一样,我在每个动作上创建一条路由,唯一的区别是它们位于单个位置,或者如果您确实有大量路由,应该说Routes文件夹。 –

+0

林不知道我明白了吗? – Derek

0

我认为从可维护性和可读性的角度来看,如果您有一个与基于约定的路由很好匹配的项目,那就去做吧。在配置文件中有几条路线比装饰每个控制器要简单很多。

但是...

在我的经验约定的路由过于简单,往往打破了对大或更复杂的项目。经常发生的事情是,您以默认的{控制器}/{动作}/{id}路线开始。但是你决定你需要更多的路线,因为你需要更深的层次结构,所以开始添加路线。就像这样:/ company/5/employee/7/edit。然后,你必须小心你的路线放置顺序,以便找到正确的路线。一旦开始添加自定义路线,您可能会发现更多的路线与特定的请求匹配,因此您添加了一些路线限制。随着您的项目变得越来越大和/或更复杂,您的路由配置会随着规模和复杂性的增长而变得容易出错并且难以维护。

属性路由使您能够更好地控制路由,因为您可以将特定的控制器和动作映射到特定的路由,而不用担心错误的路由会匹配。此外,由于路线靠近控制器故障排除路线要容易得多。

TL; DR:在某些时候,无论您使用基于约定的路由还是属性路由,路由变得更加难以维护。属性路由就是要控制路由并避免路由错误。

另一个替代方案,看起来很有希望为MvcCodeRouting这是基于命名空间路由