個人第一個python web開發框架(24)——系統重構與ORM

  小白弄完代碼版本管理和接口文檔後,興奮的找到老菜。python

  小白:老大,我已經按你講的要求,將代碼版本管理和接口文檔都搞好了。從項目開始到如今,除了代碼編寫,感受學會好多東西啊。sql

  老菜:嗯嗯,實戰確實須要掌握不少代碼之外的東西。若是你只是想安靜的作一位碼農,別人安排什麼你就作什麼,其餘事情別人搞定,那你只會寫代碼並無什麼問題。可是,若是你不安於現狀,想要作的更好,熟悉開發整流程,從需求、產品、原型、文檔、架構、數據庫、編碼、測試、服務器部署、調優......都有所瞭解,遇到問題都能信手拈來,那你就得多學學各類工具的應用與配置,去練手使用了。數據庫

  小白:是啊,這個項目開發過程當中就遇到了太多的坑了,不少很簡單的事情,因爲沒有經驗花了大量的時間就是搞不定,好在有你幫忙指導,否則也不知可否交付了。爲何你能一眼就看出問題在哪裏呢?設計模式

  老菜:嘿嘿...由於這些坑多數咱們這些工做多年的幾乎都遇到過,碰多了天然就懂了。在遇到問題時,最好不要立刻去問人,先自行研究解決,養成自行解決問題的能力,之後再遇到其餘問題時就能輕鬆解決了。若是不是,下次遇到一樣問題或相似問題,有可能仍是解決不了,還得去請教別人,這樣一方面你本身不會有多大的長進,另外一方面別人的時間也是時間,別人也不欠你什麼必定要爲你解答是吧。因此說經歷很重要,你對不少技術都不熟悉,須要去踩坑,去研究,找出你本身的答案與解決辦法。安全

  小白:好的,我會繼續努力的。如今系統要重寫,還須要注意些什麼?要怎麼作呢?可否詳情的講解一下。服務器

  老菜:系統重構,對於新系統、舊系統,或者開發過程當中,都是屢見不鮮,常常要作的事情。架構

  代碼重構主要是爲了提升代碼的重用性,改善軟件的質量,提高軟件的性能,使軟件架構或框架的設計更加合理,進而提升軟件的可讀性、可擴展性和可維護性。相關書籍都有不少介紹了,好比《重構:改善既有的代碼的設計》、《大話重構》等,這裏就不深刻說明,只針對本系統簡單講解一下。併發

  正常來講,你在開發過程當中發現存在重複代碼時,就須要考慮將這部分代碼重構了,而不是等升級版本或重大改造時才進行的,由於重複代碼越多,維護起來就會越複雜,越有可能出錯。好比說你有個功能是進行字段串轉整形變量的,代碼一開始並無進行封裝,而後不少地方都使用int()進行轉換,有一天測試時發現,用戶輸入帶小數的數字字符串,這時程序拋出異常,須要進行改造。你花了半天時間將全部轉換的地方進行了修改,作了判斷處理。過了一段時間又發現,有些客戶不遵照規則,直接輸出無心義的字符串,又出現了異常,你又得花時間進行改造,萬一有些地方沒有改到遺漏了,說不定那天又會蹦出一個異常來。若是你在開發過程當中,有及時進行重構,將這個重複代碼封裝成一個轉換函數,那麼你只須要修改這個轉換函數就能夠了。app

  除了重複代碼須要進行封裝外,對於一些相似的功能也須要從新進行改造,好比說小白你這個項目,對數據庫操做這一塊就能夠看到好多差很少的代碼,不少數據查詢差異只是數據表不一樣或查詢條件不一樣而已,這就須要進行重構,抽象出來寫成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的。

 

 

版權聲明:本文原創發表於 博客園,做者爲 AllEmpty 本文歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然視爲侵權。

python開發QQ羣:669058475(本羣已滿)、733466321(能夠加2羣)    做者博客:http://www.cnblogs.com/EmptyFS/

相關文章
相關標籤/搜索