小白弄完代码版本管理和接口文档后,兴奋的找到老菜。

小白:老大,我已经按你讲的要求,将代码版本管理和接口文档都搞好了。从项目开始到现在,除了代码编写,感觉学会好多东西啊。

老菜:嗯嗯,实战确实需要掌握很多代码以外的东西。如果你只是想安静的做一位码农,别人安排什么你就做什么,其他事情别人搞定,那你只会写代码并没有什么问题。但是,如果你不安于现状,想要做的更好,熟悉开发整流程,从需求、产品、原型、文档、架构、数据库、编码、测试、服务器部署、调优......都有所了解,遇到问题都能信手拈来,那你就得多学学各种工具的应用与配置,去练手使用了。

小白:是啊,这个项目开发过程中就遇到了太多的坑了,很多很简单的事情,由于没有经验花了大量的时间就是搞不定,好在有你帮忙指导,不然也不知能否交付了。为什么你能一眼就看出问题在哪里呢?

老菜:嘿嘿...因为这些坑多数我们这些工作多年的几乎都遇到过,碰多了自然就懂了。在遇到问题时,最好不要马上去问人,先自行研究解决,养成自行解决问题的能力,以后再遇到其他问题时就能轻松解决了。如果不是,下次遇到同样问题或类似问题,有可能还是解决不了,还得去请教别人,这样一方面你自己不会有多大的长进,另一方面别人的时间也是时间,别人也不欠你什么一定要为你解答是吧。所以说经历很重要,你对很多技术都不熟悉,需要去踩坑,去研究,找出你自己的答案与解决办法。

小白:好的,我会继续努力的。现在系统要重写,还需要注意些什么?要怎么做呢?能否详情的讲解一下。

老菜:系统重构,对于新系统、旧系统,或者开发过程中,都是家常便饭,经常要做的事情。

代码重构主要是为了提高代码的重用性,改善软件的质量,提升软件的性能,使软件架构或框架的设计更加合理,进而提高软件的可读性、可扩展性和可维护性。相关书籍都有很多介绍了,比如《重构:改善既有的代码的设计》、《大话重构》等,这里就不深入说明,只针对本系统简单讲解一下。

正常来说,你在开发过程中发现存在重复代码时,就需要考虑将这部分代码重构了,而不是等升级版本或重大改造时才进行的,因为重复代码越多,维护起来就会越复杂,越有可能出错。比如说你有个功能是进行字段串转整形变量的,代码一开始并没有进行封装,然后很多地方都使用int()进行转换,有一天测试时发现,用户输入带小数的数字字符串,这时程序抛出异常,需要进行改造。你花了半天时间将所有转换的地方进行了修改,做了判断处理。过了一段时间又发现,有些客户不遵守规则,直接输出无意义的字符串,又出现了异常,你又得花时间进行改造,万一有些地方没有改到遗漏了,说不定那天又会蹦出一个异常来。如果你在开发过程中,有及时进行重构,将这个重复代码封装成一个转换函数,那么你只需要修改这个转换函数就可以了。

除了重复代码需要进行封装外,对于一些类似的功能也需要重新进行改造,比如说小白你这个项目,对数据库操作这一块就可以看到好多差不多的代码,很多数据查询差别只是数据表不同或查询条件不同而已,这就需要进行重构,抽象出来写成ORM。

当然除了这些之外,针对功能需求的变更,对高并发、高可用、安全性、大数据、海量存储等不同的非功能需求时,有可能还需要对整个框架、架构进行重新设计,以适应新需求的需要。

在重构时必须遵循面向对象的七大原则,学好设计模式。具体可以多看看书,多研究别人写的源码,多学习多思考就明白了。

小白:这个知识量有点大,听着有点晕...重复代码重构这个我明白了,工具包里的那些工具函数大多都是重构出来的吧。刚刚讲到数据库操作要重构,能讲讲什么是ORM吗?要怎么处理?

老菜:ORM(英文全称:Object Relational Mapping)简称对象关系映射,直白点说就是将对象(可以是dict、list、元组等各种对象)通过转换,生成对应的sql语句,从而实现对数据库的增、删、改、查等操作。也就是说,原来我们对数据库操作时,需要写sql语句的,我们会发现经常会出现重复的代码维护起来不方便,现在只需要将要操作的字段或内容,存储(赋值)到相关对象中(dict、list、元组),然后这些值扔给ORM类中,ORM类会对赋的值进行对应分析进处理,最终生成可执行的sql语句。

ORM的优缺网上已经有各种描述了,你可以去查查。这里我想说的是,它对于我们开发人员来说最大的优点是可以极大的提升我们的开发效率,减少bug的发生,让代码更容易维护。相对于所谓的性能损耗,在当今的高性能硬件下,可以直接忽略不计。对于一个项目或公司的生命期与成本来说,人力成本、时间成本与机会成本才是最重要的。

python的ORM有很多成熟的包可以直接安装调用,不过我建议自己开发会好一点,一方面写一个简单的ORM非常简单,另一方面,自己开发的ORM要升级、开发、维护也会更加的得心应手,想怎么改就怎么改。你可以当它是sql的翻译模块就可以了,我们只需要处理好重复的、简单的语句翻译,对于复杂的就不需要使用ORM,直接写sql执行,这样既灵活,又方便可控。

接下几个章节会详细介绍一个ORM是如何从0到1的。

版权声明:本文原创发表于 博客园,作者为

python开发QQ群:669058475    作者博客:http://www.cnblogs.com/EmptyFS/

python cs开发框架_我的第一个python web开发框架(24)——系统重构与ORM相关推荐

  1. python后台框架_我的第一个python web开发框架(14)——后台管理系统登录功能

    27 28 29 30 31 32 33  34 35 36 37 38 39  40 41 42 43 44 45 46 47 style="width:150px;"> ...

  2. TSS翻译:帮我选一个Java Web开发框架吧

    TSS:帮我选一个Java Web开发框架吧 最近 TheServerSide.com 上一篇文章引起了常常的讨论.地址见这里:Chose a web client framework. Cheste ...

  3. python爬酷狗音乐_良心推荐!一个Python高手必读的库,真香!

    菜鸟进阶高手,需要内外的修炼,外练招式,内修心法.招式有很多比如基本的函数,类,文件,模块,到并发,数据库的使用,再到一些框架的使用无论是爬虫的西瓜皮框架,还是后端的Django,Flask等等.内功 ...

  4. python中datetime库_一天掌握一个Python库--datetime库

    #一天掌握一个Python库--datetime库 **datatime** 模块题共用一些处理日期,时间和时间间隔的函数.这个模块使用面向对象的交互取代了**time**模块中整形/元组类型的时间函 ...

  5. python编一个答题程序_我开发了一个Python答题小程序,近70份奖品等你来拿

    微信小程序非常火爆,我想做小程序已经很久了,几个月前终于下定决心做一款小程序.本身是码农出身,希望做一款跟编程相关的小程序,于是就有了这一款"码题达人"小程序. 搜索微信小程序:码 ...

  6. pyhton如何导入包的每一个文件_如何开始第一个 Python 编程实践项目?

    首发公众号:交通攻城狮 微信ID:TrafficBlog 2020,第 15 期 导语:上期我们谈了谈如何高效的入门 Python 编程,了解了 Python 的编程环境以及常用的包,如 Pandas ...

  7. python怎么开始编程_如何开始第一个 Python 编程实践项目?

    导语:上期我们谈了谈如何高效的入门 Python 编程,了解了 Python 的编程环境以及常用的包,如 Pandas.Matplotlib.Numpy 等.这次我们将以实践项目的形式,帮助大家快速的 ...

  8. python 两点曲线_十行代码,用Python做一个迷你版的美图秀秀

    美图秀秀相信大家都不陌生,大家只要操作美图秀秀,就可以P掉图片中脸上的一些瑕疵,让人变得更加的美丽.今天小编就带领大家来借助Python和Flask来实现一个美图秀秀的网页设计,大家只需要通过网页上传 ...

  9. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

最新文章

  1. Java Random()函数生成指定范围的随机数
  2. 增强型固态硬盘支持人工智能工作负载
  3. WZJ的数据结构(零)KMP
  4. 每天三分钟玩转Git(已完结)
  5. kafka系列文章索引
  6. cocos2dx java 调用lua_Cocos2d-x Lua实现从Android回调到Lua的方法
  7. Nginx负载均衡策略介绍
  8. python json unicode_python2下解决json的unicode编码问题
  9. 长语音识别体验_如何为语音体验写作
  10. java byte 梳理
  11. 支持向量机很全的代码和数据集
  12. vim字符串全局替换
  13. html转义字符 am,html转义字符如何通过代码识别方法
  14. 电商数据分析项目总结!
  15. 单片机学习(点阵LED及多模块同时实现)
  16. 卡券、直充订单列表(post 表单提交)接口
  17. Matlab bsxfun函数
  18. 电路分析 笔记整理(模拟电子电路)
  19. spring boot集成Elasticsearch客户端
  20. 【尚硅谷】新web项目-QQZone代码及详细解析

热门文章

  1. linux history(命令历史)
  2. 一致性直线提取--Coherent Line Drawing
  3. 【numpy】np.genfromtxt非常的慢,并且需要读取文件的10倍内存
  4. android studio 2.1正式版,Android Studio 1.2 正式版发布
  5. 数据与计算机通信第八版pdf,数据与计算机通信(第八版)(英文版)
  6. oracle 开窗子句,分析函数和开窗函数
  7. JAVA批量上传下载Excel_如何实现批量上传----------Java解析excel
  8. redis集群模式的工作原理
  9. JPA保存数据自动加入创建人,修改人
  10. docker开源系统监控软件Nagios