python在一般互联网业务中的应用(一) 项目结构

前言

在互联网行业中,关于业务还是技术,多多少少有些争论。认为技术大于业务的极客们认为,唯有技术才是立家之本,技术的进步可以实现更多业务迭代。而认为业务大于技术的实干家则认为业务是推动技术进步的源泉,而技术服务于业务,唯有解决业务问题才能发挥技术的价值。且不论哪种思想更有说服力,如今的互联网行业业务和技术缺一不可相辅相成是既定事实,而作为开发者的我们,唯有在业务中不断积累技术,用技术实现业务创新才是推动自身成长的正途。

python由于其语法简单精炼,学习成本低,开发周期短,如今已然从一门脚本语言往工程化的方向发展,收到越来越多的互联网公司,尤其是创业公司的追捧。但其动态语言的一些特性仍然使其在实际业务的开发中产生一些问题,尤其是大型项目的中后期,如果开发不当,会造成比较严重的代码灾难。接下来的几篇文章将提供一种用python来写业务的正确姿势,以尽量克服python在大型项目中的各种缺陷。

项目结构

作为业务代码,一个完整的项目经常包括以下几部分:

  • API层: 解析请求参数,屏蔽无效参数,调用逻辑层,组装相应并返回。
  • 业务逻辑层: 业务逻辑的抽象层(可以简单理解为写if和for的地方),处理会产生结果的业务。
  • 查询逻辑层: 处理单纯的查询业务,所有逻辑不会对数据产生影响。(可简单理解为GET请求后对应的部分)
  • 数据层: 负责处理数据的组装(如将DB对象翻译为字典,以及整合不同),直接操作DB层。
  • DB层: 一般为ORM,处理与数据库的映射。
  • 外部调用层: 封装调用外部业务的http或rpc请求,供逻辑层调用。
  • 配置项: 一般为app、消息队列和外部调用的一系列配置。
  • 脚本层: crontab或workflow的任务脚本,不供其他类调用,可调用数据层。
  • 工具类: 一些翻译类或组装类,供API层和逻辑层调用。
  • 消息层: 处理消息队列的消息,可调用数据层。
  • 文档
  • 单元测试

基于上述部分,你的项目代码应包含以下结构(省略了各目录下细分结构):

|____my_project
| |____api
| |____conf
| |____data
| |____doc
| |____domain
| |____message
| |____models
| |____query
| |____rpc
| |____scripts
| |____test
| |____util
|______init__.py
|____app.py
|____settings.py

如果是第一次开始一个项目工程,则需要谨慎考虑工程中这些抽象层的功能和调用逻辑,展开来说,就是每一个抽象层只能含有对应功能的代码,每一个抽象层只能调用特定的抽象层,并被特定的抽象层调用。有了清晰的层次结构,即使参与者的代码功底较差,也不至于使工程成为灾难而无从下手。笔者认为这是避免你的项目成为一锅粥的最有效的手段。

关于调用逻辑,这里举个例子,一个api如果想访问DB层的数据,那它的调用关系应该是这样的:
API层 -> 业务/查询逻辑层 -> 数据层 -> DB层
DB层只能被数据层调用,其他抽象层不能越过数据层直接对DB进行操作。

在项目不断扩展壮大的过程中,应坚决遵循期初设计的调用逻辑和功能抽象,以维持项目的层次结构。

如果是在中途接手项目,则应理清项目的调用逻辑和功能设计,尊重并遵循设计者的层次结构。

在处理一个需求前,应首先拆分需求,考虑需求需要对项目中的哪些抽象层进行修改,并着手考虑代码设计。这样,再复杂的需求经过拆分,也将变得层次分明。你的项目代码的易读性和可维护性也不会随着业务的扩大而变得很糟。

tips

当然,如果你想寻求相对靠谱且通用性强的项目结构模板,这里有一款开源项目不错。cookiecutter document

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容

  • //我所经历的大数据平台发展史(三):互联网时代 • 上篇http://www.infoq.com/cn/arti...
    葡萄喃喃呓语阅读 51,225评论 10 200
  • 热播剧《欢乐颂》为自媒体写手们贡献了不少的话题,一波又一波的文章不断刷屏,从教人如何成为安迪一样的职场女精英、到樊...
    李心安阅读 432评论 0 4
  • 为买一只猫? 无意看到这部动画片,看了一集,突然有点了解你了。 -----童心,不想长大,孤独... 我说过的代沟...
    二宁阅读 252评论 0 0
  • 我们无法控制生命中一些人的离开,唯有接受。 我比别人提前知道老板的离开,但是,我并不十分惊讶。相反,第一感觉是,2...
    Hazel0921阅读 102评论 0 0
  • 他是将军遗孤,奉皇命驻守边疆,随时准备与敌决一死战。 她是桃村少女,扮成多病的弟弟,应征入伍忍受边疆苦寒。 战事已...
    安静的咖喱阅读 254评论 0 1