1. 程式人生 > >我的第一個python web開發框架(24)——系統重構與ORM

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

內容 版權 質量 重寫 很多 掌握 orm .... 最重要的

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

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

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

  小白:是啊,這個項目開發過程中就遇到了太多的坑了,很多很簡單的事情,由於沒有經驗花了大量的時間就是搞不定,好在有你幫忙指導,不然也不知能否交付了。為什麽你能一眼就看出問題在哪裏呢?

  老菜:嘿嘿...因為這些坑多數我們這些工作多年的幾乎都遇到過,碰多了自然就懂了。在遇到問題時,最好不要馬上去問人,先自行研究解決,養成自行解決問題的能力,以後再遇到其他問題時就能輕松解決了。如果不是,下次遇到同樣問題或類似問題,有可能還是解決不了,還得去請教別人,這樣一方面你自己不會有多大的長進,另一方面別人的時間也是時間,別人也不欠你什麽一定要為你解答是吧。所以說經歷很重要,你對很多技術都不熟悉,需要去踩坑,去研究,找出你自己的答案與解決辦法。

  小白:好的,我會繼續努力的。現在系統要重寫,還需要註意些什麽?要怎麽做呢?能否詳情的講解一下。

  老菜:系統重構,對於新系統、舊系統,或者開發過程中,都是家常便飯,經常要做的事情。

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

  正常來說,你在開發過程中發現存在重復代碼時,就需要考慮將這部分代碼重構了,而不是等升級版本或重大改造時才進行的,因為重復代碼越多,維護起來就會越復雜,越有可能出錯。比如說你有個功能是進行字段串轉整形變量的,代碼一開始並沒有進行封裝,然後很多地方都使用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的。

版權聲明:本文原創發表於 博客園,作者為 AllEmpty 本文歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則視為侵權。

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

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