惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
有赞技术团队
有赞技术团队
博客园_首页
H
Help Net Security
GbyAI
GbyAI
aimingoo的专栏
aimingoo的专栏
V
Visual Studio Blog
The Cloudflare Blog
腾讯CDC
Jina AI
Jina AI
Last Week in AI
Last Week in AI
月光博客
月光博客
博客园 - 叶小钗
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
爱范儿
爱范儿
N
Netflix TechBlog - Medium
F
Fortinet All Blogs

Tornado

docker 多进程部署 tornado Tornado 如何拿到传输的文件流 Tornado 的异步 怎么写的 tornado 下 ckeditor 图片上传问题 Tornado 异步怎么写的? tornado 怎么能确保端口挂了 服务也不会停止? Tornado 路由有什么好方法,一个一个写太麻烦了,有没有根据 url 和注解匹配的方法呢 Tornado V4.5 release pypy 拿到赞助之后出了支持 Python3.5 的版本 请教 tornado 文件上传问题 tornado 做后台服务,如果前端没有用 cookie. tornado 优秀项目推荐 问一个 tornado 解决阻塞的方案问题? tornaqiniu(基于 tornado 的异步七牛 sdk) tornado 并行异步,如何保证在只有部分请求成功后,结果依旧可用。 nginx 反向代理 tornado,如何 location 首页u rl? 问一个关于 tornado 异常处理的新手问题 tornado 的 coroutine 能和自定义的装饰器一起使用吗?? Tornado 并发数很低,正常么? 阅读 Tornado 源码过程中的一个疑惑,求解答 gtornado - tornado 中 pymysql, pymemcache, storm orm 支持库 tornado 跑不通,小白求帮忙 Tornado 4.3 发布 Tornado 官方怎么不好好维护一个 sql 的异步数据库驱动? 关于 tornado 阻塞的问题 tornado 的 mysql 异步驱动性能测试 pypy 之 tornado tornado 多个 url RequestHandler 类的 get_current_user() 方法覆写无效 tornado 动态添加 url 的问题
Tornado 如何组织中大型项目,你们都是怎么样做的?
mywaiting · 2015-11-26 · via Tornado

用了 tornado 也写网站,无它,当初就是因为喜欢,因为 tornado 的代码写得真心漂亮。
一开始我是这样组织项目的,你没有看错,真心只有这几个文件:
+ project
| - app.py (基本所有的 handler 都在这里了)
| - models.py (数据库相关的)
| + templates
| + static
如果要给个参考例子,那 BT 大大的项目来参考吧 https://github.com/finiteloop/socialcookbook 刚刚开始写 tornado 的项目的时候没有那么多的东西,一切都很简洁很美好!
然后呢,项目越来越多功能了,需要组织的代码越来越多,需要 Seesion ,需要 form 检验等一堆东西,于是重构为这样来组织项目:
+ project
| + controllers
| | - acontroller.py
| | - bcontroller.py
| | ....
| + models
| | - amodel.py
| | - bmodel.py
| | ....
| + templates
| + forms
| | - aform.py
| | - bform.py
| | ....
| + helpers
| | - ahelper.py
| | - bhelper.py
| | ....
| - application.py
| - urls.py
| - settings.py
很直接也很明显,这是拿 Tornado 来做 MVC 这龌龊的事情了,把先前越来越大的 app.py 分开成 controllers 目录, models 目录页一样,增加了 forms 目录和 helpers 目录。 application.py 放置整个 project 的启动、关闭, URL 放在 urls.py , settings 嘛就是配置。
这样安好运行了好长一段时间,毕竟一个小网站,长成这样已经很对得起我拿的工资了。但是这样的项目结构随着业务的增多感觉越来越力不从心:
1 、首先业务关联比较多,类似于门户网站那样的 CMS 类型的,这样就无法分出几个项目来应用上面的代码组织了。
2 、子域名的需求众多,基本一个子域名 a.example.com 和 b.example.com 的代码逻辑是完全不一样的,但是数据库后面的数据却有很多需求重合的。同时原因见 1 ,又无法分出好几个 project 来组织代码
感觉越来越臃肿的代码结构,越来越多的东西加入到 Tornado 这个大杂烩里面,感觉项目长得越来越像 Django 的项目,但是组织却远不如 Django 的项目组织得好!
看了一下 Flask 的 Blueprint ,这货貌似在架构大型项目的时候很实用的样子。
就像这篇文章 https://spacewander.github.io/explore-flask-zh/7-blueprints.html 说到的按照功能(functional)或者分区(divisional)来组织代码。
按照 分区(divisional) 来组织代码貌似有天生的适合大型的且内部可以松耦合的项目,而类似我上面的 按照功能(functional) 来组织项目就适合组织功能相对内聚的项目。
按照我这么重构下去,迟早要弄个 Django 出来的感觉。有点后悔当初怎么不直接用 Django 而用上了 Tornado 来自己造各种轮子。
各位在架构 Tornado 的中大型项目,有什么经验可以分享吗?
谢谢!