我的第一个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)——小结
这个小网站终于成功上线,小白除了收获一笔不多的费用外,还得到女神小美的赞赏,心中满满的成就感.这一天下班后,他请老菜一起下馆子,兑现请吃饭的承诺,顺便让老菜点评一下. 小白:老大,在你的指导下终于完成 ...
随机推荐
- vue.js基础知识篇(1):简介、数据绑定
目录第一章:vue.js是什么? 第二章:数据绑定第三章:指令第四章:计算属性第五章:表单控件绑定代码链接: http://pan.baidu.com/s/1qXCfzRI 密码: 5j79 第一章: ...
- Csocket基本原理
我通过几个采用 CSocket 类编写并基于 Client/Server (客户端 / 服务端)的网络聊天和传输文件的程式 ,在调试这些程式的过程中,追踪深入至 CSocket 类核心源码 Sock ...
- python条件判断与循环
条件判断 1.python缩进规则: 如果if语句判断是True,就把缩进的语句执行了,否则,什么也不做,比如: age=20 if age >= 18: print('your age is' ...
- C# 爬虫 Jumony html解析
前言 前几天写了个爬虫,然后认识到了自己的不足.感谢 "倚天照海- -" ,我通过你推荐的文章,意外的发现了html解析的类库——Jumony. 研究了2天,我发现这个东西简单粗暴 ...
- 零基础如何一步一步开始搭建高性能直播平台?现以GitChat·架构来进行说明
前言 现在直播已经成为移动互联网时代一个新的重要流量入口,从YY.斗鱼到花椒直播,直播已经成为人们分享交流的新方式,应用场景众多,主要分为: 金融类直播:金融直播可应用于实时解盘,在线专家讲座,专家在 ...
- java面向对象(五)之多态
多态 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. ...
- 博客已转移至 http://blog.yemou.net/
博客已转移至 http://blog.yemou.net/ , 该网站是一家更加专业的网站,欢迎大家过去交流
- ADO.NET调用存储过程
建表 CREATE TABLE [tab_cJ] ( [id] [, ) NOT NULL PRIMARY KEY, [name] [varchar] () , [age] [int] NULL , ...
- [置顶]
Chat Room:基于JAVA Socket的聊天室设计
d0304 更新功能实现 d0312 更新部分图片&UI设计部分 d0318 更新功能实现 d1222 实现添加好友功能.实现注册功能.修改大量BUG github:https://githu ...
- Navicat连接oracle数据出现的oci问题
为了用navicat操作数据库,我安装了navicat,安装完后可以连接oracle,mysql,sql service,sqlite,所以这个工具非常好用. 但是在连接数据库的时候报错了:" ...