作为架构师,我正在构建的应用程序具有符合REST的url方案,可以准确地表示域,我想要一种方法来强制执行具有以下属性的约定:
根据我的经验,类命名和动作命名约定最终会分崩离析(域模型并不完全遵循对象模型,或者开发人员发现很难调试路由),应用程序还原为属性路由。属性路由有许多缺点,并且可以成为一个狂野的西部环境,其中几个URL样式一起增长。
有什么可以解决这个看似常见的问题?
答案 0 :(得分:0)
嗯,你正在寻找不存在的第三种选择。传统的路由和属性路由几乎涵盖了所有场景。你使用的只是权衡每个人的利弊。
传统路由是基于约定的方法,因此,如果您正在寻找某些不必考虑的东西,那就是它。默认值为/controller/action
格式,但您可以为需要其他内容的特定方案创建其他路由。所有路由都集中在RouteConfig.cs
,HtmlHelper
和UrlHelper
中与路由相关的帮助可以称为强类型:Html.ActionLink<FooController>(m => m.Index(), "Foo")
。
关于唯一没有从您的列表中删除的项目是&#34;可版本化的&#34;,但我不确定您的预期会如何工作?我的想法立即进入Web Api,并使用v1
,v2
等方式为路由添加前缀。如果这是您正在谈论的内容,您可以轻松地执行此操作传统路由。
如果您想要更灵活的东西,那就是属性路由的来源,实际上,您可以混合搭配传统的路由和属性路由,以获得两全其美的效果。属性路由很少形式化,但这就是重点。
最终,这只是归结为组织内的标准。没有任何编程语言,框架或路由系统可以将您锁定为一种始终如一的方式。如果要进行标准化,则必须强制执行标准化。这就是代码审查,质量保证等等问题。您不应期望一个框架来解决您的制度问题,因为它永远不会。