架構,改善程序復用性的(de)設計(ji)~第一講 系(xi)統(tong)的(de)復用性離不開系(xi)統(tong)的(de)面向(xiang)對象性
非常(chang)抱歉讓大家等了(le)這么久,這個系列(lie)的第一(yi)講(jiang)才開始,呵呵,目(mu)錄寫出來(lai)后,就(jiu)是(shi)按著目(mu)錄一(yi)個一(yi)個的講(jiang)出來(lai),與大家一(yi)起分享我的開發(fa)經(jing)驗了(le),呵呵。
今天(tian)主要說一(yi)下“系(xi)統的(de)(de)復用(yong)性離(li)不(bu)(bu)開系(xi)統的(de)(de)面向對象性”,我們可(ke)能(neng)有一(yi)種感(gan)覺,那(nei)就是(shi)(shi)在開發一(yi)個(ge)項目時用(yong)到了一(yi)段代碼塊,在另一(yi)個(ge)項目中也用(yong)到了,我們通常的(de)(de)作法(fa)就是(shi)(shi)ctrl+C,然后ctrl+V,呵呵,這樣做的(de)(de)好處就是(shi)(shi)省事,不(bu)(bu)好的(de)(de)地方也是(shi)(shi)“不(bu)(bu)省事”,為什么這樣說呢?
省事:因為它(ta)不(bu)需要(yao)考慮什么,只(zhi)是為了實現(xian)而去(qu)實現(xian),而這肯定是不(bu)提倡這種方(fang)式的(de),因為使用這種方(fang)式編程的(de)人,永遠不(bu)會體(ti)會到其中的(de)樂趣,可能只(zhi)是為了工(gong)資而去(qu)工(gong)作。
不省(sheng)事:在(zai)程序的(de)(de)測試階(jie)段,工程師們(men)突然發(fa)現了你(ni)(ni)復制的(de)(de)那(nei)(nei)塊代碼出(chu)現問(wen)題了,可能是(shi)(shi)(shi)性(xing)能問(wen)題,也可能是(shi)(shi)(shi)業(ye)務問(wen)題,也可能是(shi)(shi)(shi)。。。,反正是(shi)(shi)(shi)出(chu)問(wen)題了,那(nei)(nei)你(ni)(ni)作為一(yi)個(ge)負責的(de)(de)程序員,會怎么樣,當然是(shi)(shi)(shi)一(yi)個(ge)一(yi)個(ge)的(de)(de)去(qu)改(gai)了,同樣是(shi)(shi)(shi)ctrl+C,ctrl+V,但此時你(ni)(ni)的(de)(de)一(yi)定再(zai)(zai)后悔,不如把(ba)塊代碼,或(huo)(huo)者那(nei)(nei)個(ge)方(fang)法,再(zai)(zai)或(huo)(huo)者那(nei)(nei)個(ge)類,再(zai)(zai)或(huo)(huo)者那(nei)(nei)個(ge)項目給(gei)抽象了,呵(he)呵(he)。
今天我就(jiu)來說一下系統(tong)(tong)(tong)要想得到復用(yong),必須把系統(tong)(tong)(tong)先進行抽(chou)象,也(ye)就(jiu)是你的系統(tong)(tong)(tong)代(dai)碼要符合面向對象的特性(xing),這個系列我將會用(yong)最近開發的“通用(yong)后(hou)臺系統(tong)(tong)(tong)”做為實(shi)例,講給(gei)大家
這(zhe)個系統中,用到了4個解決方案文(wen)件夾,我下面來(lai)分別說一(yi)下它(ta)們
一 Project.Common文件夾:它為所有項目提供一個公用的,不依賴于其它項目的項目集合,如圖:
OnlinePayment:支付功能(neng)模塊相關(guan)
Standard:服務端(duan)和端(duan)戶端(duan)持久化(hua)相關
VCommons:公(gong)用功能類庫相關
VConfig:全局公(gong)用配(pei)置信(xin)息相(xiang)關(guan)
二 Project.Core文件夾:它是對N層模型的抽象,將Web(UI),Entity(Model),Data(DAL)等各層的核心公用代碼抽象出來,形成一個與領域無關的項目集合,如圖:
Data.Commons:對(dui)數據層的抽象(xiang),本例中使用了Linq To SQL做為底層ORM,它同樣適用于Entity Frameworks
Entity.Commons:對(dui)實(shi)體(ti)層(ceng)的抽象,本例中的實(shi)體(ti)全部是對(dui)linq to sql原生實(shi)體(ti)的擴(kuo)展,這也(ye)多謝微軟(ruan)的partial關鍵(jian)字,并對(dui)實(shi)體(ti)賦值(zhi)進行了跟(gen)蹤(zong)
Web.Commons:對WEB層的抽(chou)象(xiang),本例(li)是(shi)標準的MVC模(mo)式(shi)的風格,對controller進行了抽(chou)象(xiang),以極(ji)對公(gong)用(yong)特(te)性的抽(chou)象(xiang),如登陸驗證等(deng)
三 Common.Background文件夾:它是對標準的后臺管理系統的抽象,包括最基礎的后臺基礎,有對用戶,菜單,權限,部門等模塊的管理,它適用于所有后臺項目,如圖:
Common.Background.Data:對后臺數據層的實現,它繼承自Data.Commons
Common.Background.Entity:對后臺(tai)實(shi)體層(ceng)的實(shi)現,它繼承(cheng)自Entity.Commons
Common.Background.Service:后臺業務層的實(shi)現,它處理最基礎(chu)的業務邏輯(ji)
Common.Background.Web.Controllers:后臺UI層的(de)實現,它繼承自Web.Commons
四 個性化項目文件夾,這個就是和領域有關的真正的項目了,它有自己的架構標準,如圖
我們可以看(kan)到,它(ta)也(ye)是標準的三層(ceng)架構,前臺和后(hou)臺公用Data和Entity層(ceng),項目比較(jiao)簡單(dan),沒(mei)有(you)使用Service層(ceng)。
通過一(yi)個真正(zheng)項(xiang)目的解(jie)說,您是否對(dui)如何提高程(cheng)序的復用(yong)性有一(yi)個比較清晰(xi)的認識了呢?呵(he)呵(he)!