Tornado 如何组织中大型项目,你们都是怎么样做的?

2015-11-26 22:24:16 +08:00
 mywaiting
用了 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.comb.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 的中大型项目,有什么经验可以分享吗?

谢谢!
12652 次点击
所在节点    Tornado
23 条回复
inevermore
2015-11-28 13:29:54 +08:00
@mywaiting 赞同,一开始使用 rails 或者 django ,看似很方便,其实不知所以然
shajiquan
2015-11-30 23:51:52 +08:00
@northisland You are very welcome.
roundgis
2021-05-14 18:14:46 +08:00
和 django 一樣

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/239245

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX