抽象封裝以及分層的思考

? ? 經(jīng)過一段時間的flask框架學(xué)習(xí),對于抽象和分層思想有了一定的理解,而對其進(jìn)行的一系列思考讓我開始思考分層治理,抽象思維的思考方式和對項(xiàng)目的管理理念。

box

(不懂的也可以看看,不復(fù)雜)

從web網(wǎng)站數(shù)據(jù)庫看抽象:

web

? ? 從flask的web開發(fā)網(wǎng)站看,分層和抽象不僅僅體現(xiàn)在代碼上,更是體現(xiàn)在整個項(xiàng)目:

? ? ? ? ①項(xiàng)目組成部分命名及類調(diào)用清晰

? ? ? ? ②數(shù)據(jù)庫的管理安全,防止了誤操作

? ? ? ? ③網(wǎng)站結(jié)構(gòu)清晰,各“部門”分工明確

一、項(xiàng)目組成部分命名及調(diào)用清晰:

? ? 主要是體現(xiàn)在,引用新的庫后,對其進(jìn)行了再命名或者嚴(yán)格大小寫。一眼就能看出是類對象還是方法對象,例如使用駱駝命名,或者大小寫命名,以及再命名使易于辨識。

? ? 其次是如果有新的可以分層和抽象的對象,就一定會新建一個對象,使得修改代碼非常簡單:

? ? 舉例來說,網(wǎng)站的用戶有不同的角色(例如管理員,普通用戶,協(xié)管員,匿名用戶),每個角色有不同的權(quán)限(例如管理整個網(wǎng)站,寫文章,評論他人文章,贊他人,處理刪除他人文章),在設(shè)計(jì)上有角色這個概念,則在代碼中,用不同的權(quán)限組合出一個元組,對應(yīng)一個角色名。那么在給用戶賦予權(quán)限的時候,直接賦給他對應(yīng)的角色就行了。這樣做的另一個好處是,當(dāng)需要添加新角色時,只需用權(quán)限組合出一個新角色就行了。

? ? 即角色=職業(yè),用戶=玩家,權(quán)限=技能,可以輕松的用技能組合出一個新職業(yè),管理玩家的職業(yè)比管理一大堆技能要容易得多,這種盡量分層來使管理清晰的方法,細(xì)想意義非凡。

二、數(shù)據(jù)庫的管理安全,防止了誤操作

SQL

? ? 這個做法在很多大型公司已經(jīng)是共識了,不管是mysql還是sql server等等數(shù)據(jù)庫,它們的增刪修改等操作都十分多樣,語言復(fù)雜,如果在刪除和修改的時候誤操作了,或者操作時出現(xiàn)了前后操作不完整引起數(shù)據(jù)錯誤,對于數(shù)據(jù)庫的影響是很大的,畢竟數(shù)據(jù)量一上來,數(shù)據(jù)庫錯誤排查是很困難的。

? ? 那么,就要在糧庫的入口處嚴(yán)厲把關(guān),在中間設(shè)一個檢查站,對于數(shù)據(jù)庫的操作都必須通過這個檢查站規(guī)定的方法來操作。具體在代碼上的實(shí)現(xiàn),就是將幾個數(shù)據(jù)庫操作語言組合并封裝成一個類方法并提供接口操作,不符合規(guī)范的報(bào)錯且不執(zhí)行,保持?jǐn)?shù)據(jù)庫的安全。

? ? 舉例:

? ? ? ? --類方法:新增一個用戶

? ? ? ? --數(shù)據(jù)庫操作語言:增加一個用戶,默認(rèn)主鍵遞增,默認(rèn)下為匿名,寫日志。。。。。。

? ? ? ? 這個類方法提供接口,那么在新增用戶的時候,只能通過這個類方法來添加這個用戶,就保證了數(shù)據(jù)庫安全,這個類方法不僅審核了信息,還規(guī)范了操作,后臺程序員不需要懂?dāng)?shù)據(jù)庫操作語言,也可以增加用戶。所以封裝在一定程度上使得分工明確,也減少了因程序員誤操作造成的數(shù)據(jù)錯誤。

三、網(wǎng)站結(jié)構(gòu)清晰,各“部門”分工明確

? ? 這個是很常規(guī)的代碼管理,對于各個不同的模塊,進(jìn)行清晰的命名和分類,建立文件夾css存放css文件,建立templates文件夾存放網(wǎng)站html模板代碼,創(chuàng)建db_respository文件夾存放數(shù)據(jù)庫遷移倉庫,建立requirements.txt文件保存所需環(huán)境和庫的版本以便在異地重建環(huán)境。

? ? 但我覺得很重要的是,這些思維當(dāng)初是如何產(chǎn)生,并一步步形成目前的項(xiàng)目管理思維的,從管理問題出現(xiàn),到思考一個web網(wǎng)站的組成部分,到哪些部分是大類,到哪些模塊重要到需要單獨(dú)建立文件夾,到各個模塊之間的連接和引用,細(xì)繪制一張圖的話,我認(rèn)為能得到代碼之外的,對信息管理和分類的一種思維模式。(現(xiàn)在圖未繪完,以后有機(jī)會發(fā)文補(bǔ)上)


跳出代碼看封裝和分層思想:

? ? 將復(fù)雜的東西通過抽象和分層簡單化,使得不熟悉的人和很久沒使用后的自己能夠很快的熟悉操作,使得一件完整的事情在操作中可以按層級推進(jìn)、減少出錯以及記錄責(zé)任歸屬。

? ? 思考到對任何項(xiàng)目管理,

? ? ①例如土木工程制圖CAD,相同的線條和轉(zhuǎn)角,可以建立模塊,對畫圖處直接放置模塊,放置下的對象的共同的父類是這個模塊,那么一旦涉及到圖案某個參數(shù)的修改,對這個模塊的所有子類來說,只需要修改這個父類模塊的數(shù)據(jù),就修改了所有的圖案。進(jìn)一步的看,對于整個CAD圖,在工程量變大以后,以模塊化的管理來繪圖,不管是查看簡單,修改也會簡單很多倍。

? ? ②例如對于人事和項(xiàng)目管理,一個部門做好相關(guān)的“接口”,例如一個報(bào)銷賬目流程,對每一步都要求記錄來到人員和操作,嚴(yán)格按照層級操作,那么出現(xiàn)問題,有綜可循,責(zé)任歸屬明確,并且不同部門和項(xiàng)目成員不用理解另一個部門的情況,只需要按照部門要求操作,也能順利完成整套項(xiàng)目流程。

? ? 分層和封裝不僅是一種編程術(shù),更是軟件開發(fā)者多年以來總結(jié)出的思維方法,跳出代碼本身,從整體上來看分層和封裝抽象,不管是什么行業(yè)什么項(xiàng)目,都還有很多的可以應(yīng)用的地方

? ? 不看細(xì)節(jié),難以落地為術(shù),不看宏觀,難以上升為道,目前我還不能理解得很深,但相信會逐漸理解它,如有想法,歡迎交流。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--Dylan 9/18/2016

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容