分层
在分層架構(gòu)中,是從總體上對系統(tǒng)進行一個分層,里面涉及縱橫向的概念,一個大的系統(tǒng)從業(yè)務(wù)邏輯來講可以不是單單的對信息的處理,也可能涉及到對一些其他的邏輯處理,這里就不能單單的把邏輯抽象到三層中,三層是橫向分層中的一個層,如果對分層的焦距拉遠點看是看不到三層的,如果把焦距拉近點看也許目標不會鎖定在信息流的處理子層中。
1.
上圖中將一個大的系統(tǒng)分解為三個業(yè)務(wù)邏輯塊其實也就是我所說的三個大的層面,我們將焦距拉近看業(yè)務(wù)邏輯1中的子層;
邏輯1這個大層被分解為兩個子層BLL、和DAL,也就是我們常用的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層;
業(yè)務(wù)邏輯1層中主要是用來對數(shù)據(jù)庫的增、刪、改、查操作,將其抽象成BLL和DAL也是我們所熟悉的三層;
在另外兩個業(yè)務(wù)邏輯層中一樣可以將其分解層多道子層;將子層分開后就要涉及到具體實現(xiàn)的問題了,
就拿C#面向?qū)ο笳Z言來將,架構(gòu)跟思想都是一些方法論的東西,具體實現(xiàn)是少不了的;
層是分好了是否在開發(fā)過程中真真做到層層隔離,不互相依賴,所以是用接口層分割開來,將具體的實現(xiàn)層脫離開來,
我們將BLL層改為BLL接口層BLLI,將DAL層改為DAL接口層DALI,這樣讓BLL、DAL去實現(xiàn)BLLI和DALI接口,
完全分離開發(fā),這也是面向?qū)ο笏岢拿嫦蚪涌诰幊潭皇敲嫦驅(qū)崿F(xiàn)編程;
?
?
以后BLL層出現(xiàn)問題可以完全替換掉換另一個BLL層,DAL層同樣也一樣;但是這是思想性的東西落實到代碼還沒那么簡單:
如:BLLI B=new BLL();//在通常情況下是這樣去用接口的,但是似乎沒有理論說的那么干凈的分離,我們在通過添加一個工廠來實現(xiàn)分離;
?
這樣在使用時:BLLI B=new BLLI工廠(BLLI接口類型);在調(diào)用工廠的時候?qū)⒔涌诘念愋妥鰹閰?shù)傳進去,在工廠中在通過接口類型去查找具體的實現(xiàn)對象;如:
??????? public static T GetInterfaceRealization<T>(Type interfacetype)
??????? {
??????????? Assembly ass = Assembly.LoadFrom("程序集的名稱");
??????????? Type[] asstype = ass.GetTypes();
??????????? if (asstype.Length <= 0)
??????????????? throw new Exception("接口管理器的異常:該程序集沒有任何實現(xiàn)類");
??????????? for (int i = 0; i < asstype.Length; i++)
??????????? {
??????????????? //獲取該實現(xiàn)類的整個繼承鏈中是否有傳入的接口類型;
??????????????? Type oddinterfacetype = asstype[i].GetInterface(interfacetype.Name);
??????????????? if (oddinterfacetype != null)
??????????????? {
??????????????????? T t = (T)System.Activator.CreateInstance(asstype[i]);
??????????????????? return t;//返回動態(tài)實例化的接口實現(xiàn)類;
??????????????? }
??????????? }
??????????? throw new Exception("接口管理器的異常:沒有該接口的實現(xiàn)類,必須先實現(xiàn)接口類才能查找");
??????? }
?因為同一個解決方案中的不同項目彼此直接引用時,有利于項目的開發(fā)調(diào)試,但是我們的BLL和調(diào)用方是完全沒有任何依賴的在程序調(diào)用時候沒有任何類型的調(diào)用所以在解決方案生成的時候不會將我們引用的項目程序集拷貝到執(zhí)行目錄中,如果想省略手工操作可以在執(zhí)行查找的時候先調(diào)用一下實現(xiàn)層的對象,這樣當(dāng)編譯生成的時候代碼檢查到你有調(diào)用會將你調(diào)用的項目程序集拷貝到執(zhí)行目錄中,在通過接口工廠動態(tài)查找時不會失敗;
這樣就徹底的實現(xiàn)層層分離的規(guī)則
?
轉(zhuǎn)載于:https://www.cnblogs.com/shiwz/p/6661341.html
總結(jié)
- 上一篇: JavaScript函数,思维导图
- 下一篇: 2020计算机专业本科毕业论文题目,计算