Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

路由不应该耦合到模块中

  我一直都主张将路由视为 Web 架构的顶层,但是最近看到 ReactRouter 0.13 的设计是在组件内放置 RouteHandler 之类的元素来处理从路由传入的子组件将其替换。我觉得这个设计很不好!路由可以选择组件,但是组件应该设计出脱离浏览器也能跑的,不应该对路由强依赖。
  自从前端单页化流行起来后,使用前端路由的架构就越来越多。但是一直以来前端路由这东西都处于一个尴尬的位置。有人觉得它是 Model 层的,也有人觉得它算单独的一层。比如 Angular 自带的路由系统就是作为 Controller 的入口存在的。虽然 Angular 自带的那套路由非常烂,但我觉得,将路由作为 Controller 的入口确实是一个正确的做法。ReactRouter 也将路由作为了类似的定义,但由于 React 本身只是纯 View 的一个库,没有自带 Controller这样的东西,所以路由是绑定到组件上。而且 ReactRouter 0.13 对层级路由的处理方式是在组件上添加 RouteHandler,于是就产生了一堆不伦不类的东西。
  好在 ReactRouter ^1.0.0 已经没有这样蛋疼的设定,不再把组件耦合到路由处理中,而是用了组件本身的 children 来处理层级路由。这么做可能在使用上有些不便之处,但至少组价就是干净的组件,完全可以脱离路由系统来跑。
  我一直主张的将路由视为顶层,准确地说应该是把它和业务逻辑解耦。业务部分应该可以不依赖路由直接跑,这样即使实现同构或 Hybride 也不需要额外的处理。至于顶不顶层其实不是关键,作为 Model 也是顶层,作为 Controller 的入口也是顶层,只是它们的维度不同而已。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^