Project Babel 重构之建议

2010-08-03 10:10:07 +08:00
 c
1.RequestHandler的复用

作为论坛,每个RequestHandler都需要处理下面的数据,cookie,访问平台,所以目前我抽象出来的PublicHandler代码如下: http://github.com/benmao/v2ex/blob/9f72eb031a5395617a8955c4b984de94f0b6b1f3/handler.py

self.os 保存了浏览平台[desktop|mobile]
self.member 保存了用户,默认为None

同时在handler里实现了一个requires_login的Decorator,在需要登录的get|post前面加上@requires_login即可。

2.Model的方法

在Django里,默认的一些查询都是在Model里实现,并且有2个很重要的装饰器,classmethod和property。

代码见:http://github.com/benmao/v2ex/blob/4c6126a7f8202056bb3ad9c0ebd52a4ad5288c55/v2ex/babel/__init__.py

里面实现了一个mem的Decorator,方便把查询的数据保存到Memcache。如何使用见里面Member Model 里的get_member_by_auth Method 和Node Model里的get_home_nodes_new Method.

然后还可以重写Model的put和delete Method,达到自动管理Memchache,GAE的Memchache管理一定要在Model这个地方来弄,如果在逻辑里写,最终会很麻烦。

3.合理使用logging

logging是一个很方便的记录日志的工具,应该合理利用。

4. 关于查询,最好用Query类吧。

5.这里我重构了main.py里的SigninHandler,diff见:http://github.com/benmao/v2ex/commit/4c6126a7f8202056bb3ad9c0ebd52a4ad5288c55#diff-0

Livid 看看哈,如果和你有共同的语言,我就继续贡献力量,如果没有共同语言,那我就放弃了,继续去研究webgame了 :)
4196 次点击
所在节点    Project Babel
5 条回复
c
2010-08-03 10:12:53 +08:00
@Livid 提供开发GAE的能力,最简单的办法,看GAE的代码吧 :)
c
2010-08-03 10:15:37 +08:00
根据我初步估计,按照上面办法重构,需要1-3天,代码量至少减少30%。
c
2010-08-03 10:33:48 +08:00
Leo
2010-08-03 11:35:56 +08:00
Lz也是神级人物..一句都看不懂- -'
sospartan
2010-08-03 13:39:10 +08:00
这些都是好东西

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

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

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

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

© 2021 V2EX