内容简介:这是我在公司项目中写下的约定, 该项目使用Python3开发, 分享出来, 希望对大家也会有一些帮助
这是我在公司项目中写下的约定, 该项目使用 Python 3开发, 分享出来, 希望对大家也会有一些帮助
-
项目杜绝循环引用, 包之间的引用关系为(
->
表示被引用)models -> controllers -> application ^ ^ \ / \ utils service
-
包内相对引用,包外绝对引用
-
controllers
,models
,utils
都是package
,使用__all__
来管控其下面的成员, 所有代码使用如下方式导入:from itachi.models import Base
而不是from itachi.models.base import Base
单元测试除外, 单元测试可能需要mock包内成员, 所以可能需要跳过
__all__
的限制 -
每个单元测试用例必须自己清理自己创建的数据
-
单元测试必须继承
tests/base.py -> BaseCase
, 使用prehook
和posthook
替代setUp
和tearDown
, 因为base中处理的app的context顺序会影响单元测试(因为这个项目用的是flask,所以这一点比较蛋疼) -
每次修改完数据库,必须显示commit
session.commit()
-
禁止使用
lazy import
这种方式来规避循环引用,正确的方式是合理的规划代码组织, 参见第一条 -
推送使用接口来定义, 见
itachi/services/push/base.py
, 由于python没有明确声明接口的方式, 所以还请人为遵守 -
异步任务task应当是可重入的, 会配置为重试
-
显示优于隐式, 所以不要用各种trick
-
requirements.txt
和requirements-dev.txt
分别对应正式和开发环境的依赖, 其中后者仅包含前者的增量部分 -
严禁for循环查数据库,请使用连表代替,连表时请把一次性能过滤最多的条件放在上面(即区分度最大的条件)
-
请求第三方接口一定要设置超时
-
使用 Docker 容器部署,必须设置CPU和内存上限,且不得与所在机器内存大小相同或非常接近.
-
数据库(MySQL)使用
utf8mb4
(而不是utf8
)作为默认的字符集, 因为 MySQL 的utf8
不是我们平日里所说的utf8,它只能利用 最多三个字节,因此无法使用存储emoji
目前发现的可以改善的地方
-
[x] session可以和request脱离,手动
session = Session()
而非app.before_request
-
[ ] constants 可以使用
Enum
类
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Golang 实践经验
- Gitops 的一些实践经验
- 闲鱼公开多年 Flutter 实践经验
- FreeWheel基于Go的实践经验漫谈
- Logback的深度使用经验和最佳实践
- 代码审查实践经验分享:应该是大写还是小写?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
代码阅读方法与实践
斯平内利斯 / 赵学良 / 清华大学出版社 / 2004-03-01 / 45.00元
代码阅读有自身的一套技能,重要的是能够确定什么时候使用哪项技术。本书中,作者使用600多个现实的例子,向读者展示如何区分好的(和坏的)代码,如何阅读,应该注意什么,以及如何使用这些知识改进自己的代码。养成阅读高品质代码的习惯,可以提高编写代码的能力。 阅读代码是程序员的基本技能,同时也是软件开发、维护、演进、审查和重用过程中不可或缺的组成部分。本书首次将阅读代码作为一项独立课题......一起来看看 《代码阅读方法与实践》 这本书的介绍吧!