我的第一个python web开发框架(1)——前言
由于之前经验不是很丰富,写的C#系统太过复杂,所以一直想重写,但学的越多越觉得自己懂的越少,越觉的底气不足。所以一直不敢动手,在内心深处对自己讲,要静下心来认真学习,继续沉淀沉淀。这两年多以来找各种机会去参加各种沙龙或交流会,有空时就啃啃技术书籍,又或者看看一些文章或源友,努力向博客园大牛们学习。
由于工作关系,这两年很少接触C#,一直在做产品设计、项目设计、架构设计,15年底公司有机会参加了个小项目开发,使用的是python语言开发web版的TMS,从而一发不可收拾喜欢上了python。在体验了python开发的便捷以后,接下来就有了python开发的第二个、第三个web项目。
第一个项目是在运维同事小戴(运维大牛)的指导下,花了三天时间学习python基本语法,然后花了一天时间熟悉小戴写的Python框架,就马上进入开发写业务,大概花了一个月左右时间就完成了公司安排的项目并上线了。学习的第一个python框架是一个轻量级、直白、简单的框架(大家可以上小戴的博客http://www.linuxyw.com/去学习,有详细的教程和源码),这个框架的代码追求的是让没什么基础的人也能很容易看明白每行代码的用途,让初学者容易上手开发维护,降低系统的维护难度。通过这个项目的开发让我重新反思以前自己所写的代码与框架的利弊,过多的使用一些技术与模式,让自己的框架表面看功能很强大,但入门门槛就非常高了,虽然有很多文档与注释,但要学会并灵活应用就不是那么容易的事情,维护起来也比较困难,反而反朴归真的编码方式让人有另一种感受。
由于第一个项目完成的不错,所以很快公司就安排了第二个python项目。有了之前的项目经验后,发现原框架有好多重复的代码存在,代码的重用率不高,所以花了三周时间对项目底层进行了重构,根据自己的需要开发了一个全新的ORM模块,对很多工具函数进行了重构,优化了数据层代码,增加了逻辑层,根据需要在IDE中整合了多项目共享同一模块代码......当然这个过程中踩了很多很多坑,在跌跌碰碰的过程中完成了第一版的python快速开发框架。然后使用这个框架和另一位后端开发人员+10位前端开发(android/ios/web)用了三个月左右时间完成了一个中型项目开发,并通过测试上线运行。
创业型公司的生命是短暂的,在16年的10月份公司进入了清盘,公司解聘了所有员工,拿了补偿后应广东老东家邀请回到了广州上班,广州公司业务比较复杂,原系统的扩展性不强,每增加一个电信运营商就得部署一套差不多的代码,如果合作的APP同时接入不同的运营商,就得部署多套类似的接入不同运营商的服务,也就是说合作越多部署的服务就会越多:运营商*N个*N个APP合作商=xx个服务。维护起来非常麻烦,且数据不能共享,需要重新开发一套系统来代替原来系统。由于python开发效率高速度快、维护方便等原因考虑,就有了我第三个python web项目,同时也是我独立设计的第一个分布式微服务架构的项目,通过一个多月孤军奋战,对原python框架进行了全面重构和重写,python快速开发框架2.0版终于出来了,接着在另一位同事的共同努力下,用了一个月时间完成了旧系统业务功能往新系统迁移开发,并交付给客户使用,与客户们的旧版APP实现了无缝平滑对接。
在学习并使用python开发的过程中我经常在思考,一个好的框架会用到各种封装、设计模式、面向对象的各种原则与准则,而想要让一个初学者快速上手马上进行业务开发却很难。因为封装多了,代码简练了,重用性高了,而带来的结果是可读性可理解性却下降了,如果没有完善的文档或花大量的时间去了解,很难学得透。这两年时间自己也在尝试学习别人写的框架,学习别人写的教程,虽然说自己已经有十多年的开发经验,可学习起来经常也会感到力不从心,很吃力,因为拿到一份源码后,发现代码量太大,无从下手。而自己在使用自己写的框架时就不会出现这种情况,为什么呢?经过深入思考发现自己写的框架也不是一步到位一开始就很复杂的,它也是开始很简单,当开发经验累积以后,为了应付各种业务状况不停的重构与修改,慢慢变的越来越复杂,功能也越来越强大,而框架的可读性也慢慢随着下降了。当这样的框架给到别人学习时,他们不了解框架的发展历程,不了解很多功能模块、变量、参数......为什么要这么设计,不了解模块与模块、函数与函数等它们之间的关系,要想快速掌握新的框架可想而知难度有多大。所以即使学会了新框架的使用与开发,对于框架中存在的bug却不知怎么去修改,更不用说根据业务的需要有针对性的去改造框架底层不合理的地方了。
为了方便同事们的学习,也完成自己的承诺,于是就有了本系列文章。
本系列博文主要讲述的是一个小菜鸟,刚学会python就接了一个外包,写了一个很简单的web企业网站,而随着这个企业的发展,需求的不停变更,继续不停的改造与重构,企业网站变成一个小型电商平台、大型电商平台的过程(是否写一个大型电商平台暂时未定案,也有可能开发一个企业管理系统)。而代码也通过不停的重构,从一个简单得不能再简单的几行代码变成能应付各种业务需求变更,能快速完成开发任务的成熟框架。当然中间也经历了各种各样的坑与障碍,希望大家能喜欢这个故事,并与小菜鸟共同成长。
本系列文章会分为几大部分,第一部分主要讲的是一些基础、开发常识、开发环境与运行环境等内容,代码也会非常简单直接;第二部分是以重构为主,即主角稍微成长起来了,发现有很多重复的代码,加上出现一些突出事件,需要对系统进行重构,完善系统功能;第三部分是随着企业业务的发展,对IT会越来越依赖,提出了各种各样的需求,针对这些需求对系统进行完善;第四部分主题是变革,随着系统的完善,在这个过程中会发现代码变得复杂,应对爆增的数据和访问,现有架构体系无法负载,需要对系统框架进行变革,升级服务器架构与系统框架,往分布式、高可用、微服务架构发展变化;如果还有第五部分的话,将会讲解企业架构方面的内容,IT系统根据企业的发展战略和现有业务能力,增加用户行为分析、业务数据分析等大数据分析系统,推动企业的发展。
如果从企业架构成熟度来讲,第一、二部分,是处于项目驱动技术阶段,一切以项目决策为主;第三、四部分,是处于业务驱动阶段,业务开始依赖技术,技术根据技术需要完善与促进业务发展;第五部分是战略驱动阶段,企业慢慢对技术熟悉,会更多的利用数据分析来进行战略决策,而技术在企业方面也占据着越来越重要的角色,通过大数据来指导企业的发展。
由于我平常工作很忙,所以暂定写这几个部分,到底能否全部写完还不知道,只能走一步是一步了。前面两三部分应该没有问题,后面两部分涉及的内容太多,不好规划,章节数量恐怕会很多,如果写不完大家有兴趣的话,也可以加群一起讨论探讨一下。
作者:AllEmpty
出处:http://www.cnblogs.com/EmptyFS/
有兴趣的朋友可以加加python开发QQ群:669058475,大家一起探讨。大家有问题的话可以在群里发问,当然我平时工作也非常繁忙不一定会及时回复。
本文为AllEmpty原创,欢迎转载,但未经同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
我的第一个python web开发框架(1)——前言的更多相关文章
- 我的第一个python web开发框架(14)——后台管理系统登录功能
接下来正式进入网站的功能开发.要完成后台管理系统登录功能,通过查看登录页面,我们可以了解到,我们需要编写验证码图片获取接口和登录处理接口,然后在登录页面的HTML上编写AJAX. 在进行接口开发之前, ...
- 我的第一个python web开发框架(41)——总结
我的第一个python web开发框架系列博文从17年6.7月份开始写(存了近十章稿留到9月份才开始发布),到今天结束,一年多时间,想想真不容易啊. 整个过程断断续续,中间有段时间由于工作繁忙停了好长 ...
- 我的第一个python web开发框架(3)——怎么开始?
小白与小美公司经过几次接触商谈,好不容易将外包签订了下来,准备开始大干一场.不过小白由于没有太多的项目经验,学过python懂得python的基本语法,在公司跟着大家做过简单功能,另外还会一些HTML ...
- 我的第一个python web开发框架(22)——一个安全小事故
在周末的一个早上,小白还在做着美梦,就收到了小美的连环追魂call,电话一直响个不停. 小白打着哈欠拿起电话:早上好美女. 小美:出事了出事了,我们公司网站一早访问是一片空白,什么内容都没有了,你赶急 ...
- 我的第一个python web开发框架(2)——一个简单的小外包
第一部分说明 第一部分大概有20来章,主要讲的是一些开发常识.开发前中后期准备内容.开发环境与服务器部署环境安装设置.python基础框架结构与功能等内容,代码会比较简单. 本系列会以故事的方式,向大 ...
- 我的第一个python web开发框架(6)——第一个Hello World
小白中午听完老菜讲的那些话后一直在思考,可想来想去还是一头雾水,晕晕呼呼的一知半解,到最后还是想不明白,心想:老大讲的太高深了,只能听懂一半半,看来只能先记下来,将明白的先做,不明白的等以后遇到再学. ...
- 我的第一个python web开发框架(7)——本地部署前端访问服务器
PS:本系列内容进度节奏会放的很慢,每次知识点都尽量少一点,这样大家接触的知识点少了,会更容易理解,因为少即是多.另外,对于后面代码部分,虽然尽量不用那些复杂的封装和类,但它并不表示看了就能全部记住, ...
- 我的第一个python web开发框架(10)——工具函数包说明(一)
PS:原先是想直接进入功能开发,要用到什么函数时再创建,这样也容易熟悉每个函数的由来和使用方法,但考虑到这样操作,到时会经常在不同文件间切换,不好描述,容易造成混乱,所以还是使用函数库这种方式来说明. ...
- 我的第一个python web开发框架(21)——小结
这个小网站终于成功上线,小白除了收获一笔不多的费用外,还得到女神小美的赞赏,心中满满的成就感.这一天下班后,他请老菜一起下馆子,兑现请吃饭的承诺,顺便让老菜点评一下. 小白:老大,在你的指导下终于完成 ...
随机推荐
- 递归调用里的性能问题(js)
说明 这是在codewars.com上刷的一道js练习题,在此做个记录 问题描述 The Fibonacci sequence is traditionally used to explain tre ...
- DateTable转化为泛型集合
public class ListUtil { public static List<T> ToList<T>(DataTable dt) { List<T> li ...
- 微信网页授权封装接口——node.js版
Wechat 网页授权 授权url:(请在微信客户端中打开此链接体验) xxx为config.js中的WECHAT_DOMAIN 1.scope为snsapi_base xxx/?route=auth ...
- Linux下的I/O模型以及各自的优缺点
其实关于这方面的知识,我阅读的是<UNIX网络编程:卷一>,书里是以UNIX为中心展开描述的,根据这部分知识,在网上参考了部分资料.以Linux为中心整理了这篇博客. Linux的I/O模 ...
- 201521123084 《Java程序设计》第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. answer: (1)netassist可以用来链接IP端口 (2)accept方法可以用来监听端口,当没 ...
- 201521123053《Java程序设计》第八周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 1.List中指定元素的删除(题目4-1) 1.1 实验总结 答:先贴上主要代码: priva ...
- 戴建钊 201521123023《Java程序设计》第2周学习总结
1. 本周学习总结 (1)String类:字符串连接"+",以前觉得方便但不知其原理,所以在有大量修改字符串操作的时候用得不亦乐乎,既浪费内存,又减缓效率.现在知道用Stringb ...
- Linux命令行学习
"mkdir + 文件夹名字" 创建文件夹 "pwd" 显示当前工作目录的绝对路径. "touch" 创建空文件. "cat /p ...
- 201521123057 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
- 201521123104 《Java程序设计》 第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 1. finally(题目4-2) 1.1 截图你的提交结果(出现学号) 1.2 4-2中f ...