使用 Router 思想划分模块

使用 Router 思想划分模块,第1张

概述不管是《21天学会XXX》还是《Java编程死象》,基本上所有的编程入门书都会反复跟你讲「强类聚,弱耦合」,我理解模块划分中很容易发生模块之间耦合严重。你的代码运行依赖他的代码,然后他改了个接口你的代码就没法运行了。 所以... 模块要能独立编写、运行、测试 模块要减少对外部参数的依赖 如果熟悉 Web 开发,会发现框架要工作需要你定义 Router , Router 的作用是一个请求来了,帮这个

不管是《21天学会XXX》还是《Java编程死象》,基本上所有的编程入门书都会反复跟你讲「强类聚,弱耦合」,我理解模块划分中很容易发生模块之间耦合严重。你的代码运行依赖他的代码,然后他改了个接口你的代码就没法运行了。

所以... 模块要能独立编写、运行、测试 模块要减少对外部参数的依赖

如果熟悉 Web 开发,会发现框架要工作需要你定义 Router , Router 的作用是一个请求来了,帮这个请求找到对应的模块,接下来怎么渲染、需要显示啥,都是 Router 背后的模块的事儿了。试想 Web 开发不用任何框架,也不写 Router,一个请求过来了,会发生啥:


def matchURL(url): if url.find('/article'): article = Article() article.articleID = 1000050 article.Title = '铃铛和花瓶' return article.render() return 'No Match'

有了 Router 之后:

urls = (  '/article/:articleID','article')

Router 的本质是一个约定、一种传参规则。

我们遇到的问题不就是 Router 解决的么?彼此之间就不需要再关心对方的模块做了啥,需要调用对方模块的时候,只需要像 Router 要,不需要去关心对方模块到底做了啥,暴露了啥接口,这样也就解藕了。

其实早在远古的 Three20 时代就有运用这种思想造出的轮子:
https://github.com/alunny/three20/blob/master/src/TTNavigator.m

然后近代的复刻版有:
https://github.com/gaosboy/urlmanager
https://github.com/Huohua/HHRouter
https://github.com/usepropeller/routable-ios
https://github.com/aaronbrethorst/ABRouter

使用上都是像 Router 注册 URL 和对应的 Controller,然后在使用的时候忘记 Controller 创建、初始化的存在,直接向 Router 去要:

//注册[[HHRouter shared] map:@"/read/:userID/" toControllerClass:ReadController.class];//调用[[HHRouter shared] matchController:@"/read/1/?tabIndex=3"]

通过这种思想,模块之间的耦合度降低了,因为彼此之间传递参数都是通过URL,Controller 也更清晰。

参考资料:
http://pizi.me/86
https://github.com/gaosboy/urlmanager/

总结

以上是内存溢出为你收集整理的使用 Router 思想划分模块全部内容,希望文章能够帮你解决使用 Router 思想划分模块所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1051777.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存