【问题标题】:How can I enforce url conventions for my web application?如何为我的 Web 应用程序强制执行 url 约定?
【发布时间】:2016-08-08 14:23:30
【问题描述】:

作为一名架构师,为了让我正在构建的应用程序有一个符合 REST 的 url 方案准确地表示域,我想要一种强制执行具有以下属性的约定的方法:

  • 成功的坑(开发者做对比做错更容易)
  • 遵循类约定,除非它不这样做,在这种情况下它是可覆盖的
  • 路线存储在代码库中的一个集中位置
  • 利用类型系统(强类型控制器操作,而不是检查请求变量以获取操作内的参数)
  • 版本化

根据我的经验,类命名和动作命名约定最终会分崩离析(域模型不完全遵循对象模型,或者开发人员发现很难调试路由),并且应用程序恢复为属性路由。属性路由有许多缺点,并且可能会成为一种狂野的西部环境,多种 URL 样式一起增长。

有什么办法可以解决这个看似常见的问题?

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api routing


    【解决方案1】:

    嗯,您正在寻找不存在的第三种选择。传统路由和属性路由几乎涵盖了所有场景。您使用的实际上只是权衡每种方法的优缺点。

    传统路由是基于约定的方法,因此,如果您正在寻找开发人员不必考虑的东西,那么就是这样。默认为/controller/action 格式,但您可以为需要其他内容的特定场景创建其他路由。所有路由都集中在RouteConfig.cs中,HtmlHelperUrlHelper中路由相关的helper可以称为强类型:Html.ActionLink<FooController>(m => m.Index(), "Foo")

    关于您列表中唯一未勾选的项目是“版本化”,但我不确定您希望它如何工作?我立刻想到了 Web Api,并在路由前加上 v1v2 等前缀。如果您说的是这个,您也可以使用传统路由轻松做到这一点。

    如果您想要更灵活的东西,那就是属性路由的用武之地,事实上,您可以混合搭配传统路由和属性路由,以获得两全其美的效果。属性路由没有那么正式,但这就是重点。

    不过,归根结底,这只是您组织内的标准。没有任何编程语言、框架或路由系统会永远将您锁定在一种做事方式上。如果你想要标准化,你必须强制标准化。这就是代码审查、QA 等工作的用武之地。您不应该期望有一个框架可以为您解决制度问题,因为它永远不会。

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多