? ? 經(jīng)過一段時(shí)間的flask框架學(xué)習(xí)样勃,對(duì)于抽象和分層思想有了一定的理解伪窖,而對(duì)其進(jìn)行的一系列思考讓我開始思考分層治理碍拆,抽象思維的思考方式和對(duì)項(xiàng)目的管理理念若治。
(不懂的也可以看看,不復(fù)雜)
從web網(wǎng)站數(shù)據(jù)庫看抽象:
? ? 從flask的web開發(fā)網(wǎng)站看感混,分層和抽象不僅僅體現(xiàn)在代碼上端幼,更是體現(xiàn)在整個(gè)項(xiàng)目:
? ? ? ? ①項(xiàng)目組成部分命名及類調(diào)用清晰
? ? ? ? ②數(shù)據(jù)庫的管理安全,防止了誤操作
? ? ? ? ③網(wǎng)站結(jié)構(gòu)清晰弧满,各“部門”分工明確
一婆跑、項(xiàng)目組成部分命名及調(diào)用清晰:
? ? 主要是體現(xiàn)在,引用新的庫后庭呜,對(duì)其進(jìn)行了再命名或者嚴(yán)格大小寫洽蛀。一眼就能看出是類對(duì)象還是方法對(duì)象,例如使用駱駝命名疟赊,或者大小寫命名郊供,以及再命名使易于辨識(shí)。
? ? 其次是如果有新的可以分層和抽象的對(duì)象近哟,就一定會(huì)新建一個(gè)對(duì)象驮审,使得修改代碼非常簡(jiǎn)單:
? ? 舉例來說,網(wǎng)站的用戶有不同的角色(例如管理員,普通用戶疯淫,協(xié)管員地来,匿名用戶),每個(gè)角色有不同的權(quán)限(例如管理整個(gè)網(wǎng)站熙掺,寫文章未斑,評(píng)論他人文章,贊他人币绩,處理刪除他人文章)蜡秽,在設(shè)計(jì)上有角色這個(gè)概念,則在代碼中缆镣,用不同的權(quán)限組合出一個(gè)元組芽突,對(duì)應(yīng)一個(gè)角色名。那么在給用戶賦予權(quán)限的時(shí)候董瞻,直接賦給他對(duì)應(yīng)的角色就行了寞蚌。這樣做的另一個(gè)好處是,當(dāng)需要添加新角色時(shí)钠糊,只需用權(quán)限組合出一個(gè)新角色就行了挟秤。
? ? 即角色=職業(yè),用戶=玩家抄伍,權(quán)限=技能煞聪,可以輕松的用技能組合出一個(gè)新職業(yè),管理玩家的職業(yè)比管理一大堆技能要容易得多逝慧,這種盡量分層來使管理清晰的方法,細(xì)想意義非凡啄糙。
二笛臣、數(shù)據(jù)庫的管理安全,防止了誤操作
? ? 這個(gè)做法在很多大型公司已經(jīng)是共識(shí)了隧饼,不管是mysql還是sql server等等數(shù)據(jù)庫沈堡,它們的增刪修改等操作都十分多樣,語言復(fù)雜燕雁,如果在刪除和修改的時(shí)候誤操作了诞丽,或者操作時(shí)出現(xiàn)了前后操作不完整引起數(shù)據(jù)錯(cuò)誤,對(duì)于數(shù)據(jù)庫的影響是很大的拐格,畢竟數(shù)據(jù)量一上來僧免,數(shù)據(jù)庫錯(cuò)誤排查是很困難的。
? ? 那么捏浊,就要在糧庫的入口處嚴(yán)厲把關(guān)懂衩,在中間設(shè)一個(gè)檢查站,對(duì)于數(shù)據(jù)庫的操作都必須通過這個(gè)檢查站規(guī)定的方法來操作。具體在代碼上的實(shí)現(xiàn)浊洞,就是將幾個(gè)數(shù)據(jù)庫操作語言組合并封裝成一個(gè)類方法并提供接口操作牵敷,不符合規(guī)范的報(bào)錯(cuò)且不執(zhí)行,保持?jǐn)?shù)據(jù)庫的安全法希。
? ? 舉例:
? ? ? ? --類方法:新增一個(gè)用戶
? ? ? ? --數(shù)據(jù)庫操作語言:增加一個(gè)用戶枷餐,默認(rèn)主鍵遞增,默認(rèn)下為匿名苫亦,寫日志毛肋。。著觉。村生。。饼丘。
? ? ? ? 這個(gè)類方法提供接口趁桃,那么在新增用戶的時(shí)候,只能通過這個(gè)類方法來添加這個(gè)用戶肄鸽,就保證了數(shù)據(jù)庫安全卫病,這個(gè)類方法不僅審核了信息,還規(guī)范了操作典徘,后臺(tái)程序員不需要懂?dāng)?shù)據(jù)庫操作語言蟀苛,也可以增加用戶。所以封裝在一定程度上使得分工明確逮诲,也減少了因程序員誤操作造成的數(shù)據(jù)錯(cuò)誤帜平。
三、網(wǎng)站結(jié)構(gòu)清晰梅鹦,各“部門”分工明確
? ? 這個(gè)是很常規(guī)的代碼管理裆甩,對(duì)于各個(gè)不同的模塊,進(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),到思考一個(gè)web網(wǎng)站的組成部分味滞,到哪些部分是大類全封,到哪些模塊重要到需要單獨(dú)建立文件夾,到各個(gè)模塊之間的連接和引用刹悴,細(xì)繪制一張圖的話,我認(rèn)為能得到代碼之外的子房,對(duì)信息管理和分類的一種思維模式。(現(xiàn)在圖未繪完就轧,以后有機(jī)會(huì)發(fā)文補(bǔ)上)
跳出代碼看封裝和分層思想:
? ? 將復(fù)雜的東西通過抽象和分層簡(jiǎn)單化证杭,使得不熟悉的人和很久沒使用后的自己能夠很快的熟悉操作妒御,使得一件完整的事情在操作中可以按層級(jí)推進(jìn)蓝晒、減少出錯(cuò)以及記錄責(zé)任歸屬辆床。
? ? 思考到對(duì)任何項(xiàng)目管理死宣,
? ? ①例如土木工程制圖CAD,相同的線條和轉(zhuǎn)角惋啃,可以建立模塊哼鬓,對(duì)畫圖處直接放置模塊,放置下的對(duì)象的共同的父類是這個(gè)模塊边灭,那么一旦涉及到圖案某個(gè)參數(shù)的修改,對(duì)這個(gè)模塊的所有子類來說绒瘦,只需要修改這個(gè)父類模塊的數(shù)據(jù),就修改了所有的圖案惰帽。進(jìn)一步的看,對(duì)于整個(gè)CAD圖,在工程量變大以后频轿,以模塊化的管理來繪圖,不管是查看簡(jiǎn)單航邢,修改也會(huì)簡(jiǎn)單很多倍。
? ? ②例如對(duì)于人事和項(xiàng)目管理操骡,一個(gè)部門做好相關(guān)的“接口”,例如一個(gè)報(bào)銷賬目流程册招,對(duì)每一步都要求記錄來到人員和操作,嚴(yán)格按照層級(jí)操作虑鼎,那么出現(xiàn)問題键痛,有綜可循,責(zé)任歸屬明確絮短,并且不同部門和項(xiàng)目成員不用理解另一個(gè)部門的情況,只需要按照部門要求操作杉允,也能順利完成整套項(xiàng)目流程限府。
? ? 分層和封裝不僅是一種編程術(shù)夺颤,更是軟件開發(fā)者多年以來總結(jié)出的思維方法胁勺,跳出代碼本身,從整體上來看分層和封裝抽象寥裂,不管是什么行業(yè)什么項(xiàng)目案疲,都還有很多的可以應(yīng)用的地方
? ? 不看細(xì)節(jié),難以落地為術(shù)褐啡,不看宏觀,難以上升為道低飒,目前我還不能理解得很深懂盐,但相信會(huì)逐漸理解它,如有想法莉恼,歡迎交流速那。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--Dylan 9/18/2016