




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.Net某權(quán)限管理系統(tǒng)在一個(gè)好的架構(gòu)下編程,不僅對(duì)于開(kāi)發(fā)人員是一件賞心悅目的事情,更重要的是軟件能夠表現(xiàn)出一個(gè)健康的姿態(tài);而架構(gòu)設(shè)計(jì)的不合理,不僅對(duì)于開(kāi)發(fā)人員是一件受苦受難的事情,軟件本身的質(zhì)量更是受到嚴(yán)重威脅。架構(gòu)設(shè)計(jì)圖架構(gòu)說(shuō)明一個(gè)標(biāo)準(zhǔn)的四層架構(gòu)包含如下四個(gè)部分:1. 展示層,負(fù)責(zé)系統(tǒng)與客戶(hù)的交互2. 業(yè)務(wù)邏輯層,負(fù)責(zé)處理系統(tǒng)的業(yè)務(wù)3. 數(shù)據(jù)訪問(wèn)層,負(fù)責(zé)處理數(shù)據(jù),與不同的數(shù)據(jù)庫(kù)打交道4. 服務(wù)層,負(fù)責(zé)與其他系統(tǒng)進(jìn)行數(shù)據(jù)交互和業(yè)務(wù)集成我們?cè)诖怂膶蛹軜?gòu)的基礎(chǔ)上進(jìn)行一些擴(kuò)展,就是將業(yè)務(wù)邏輯的方法抽象出業(yè)務(wù)接口層(IBLL)。調(diào)用關(guān)系請(qǐng)結(jié)合下面的組件圖一起來(lái)看,如下:展示層(App)調(diào)用業(yè)務(wù)接口層(
2、IBLL),業(yè)務(wù)邏輯層(BLL)實(shí)現(xiàn)了接口層(IBLL),業(yè)務(wù)邏輯層(BLL)調(diào)用數(shù)據(jù)訪問(wèn)層(DAL),公共組件(Common)則是抽象了系統(tǒng)中可以共用和重用的部分,每個(gè)層都可以調(diào)用。另外,增加了一個(gè)服務(wù)層(WcfHost),將接口層(IBLL)暴露給其他系統(tǒng),使其方便與其他系統(tǒng)進(jìn)行數(shù)據(jù)交互和業(yè)務(wù)集成。注意:此處沒(méi)有讓展示層(App)調(diào)用服務(wù)層(WcfHost),是為了性能的考慮。組件設(shè)計(jì)圖組件說(shuō)明1. App頁(yè)面展示是BS架構(gòu)的項(xiàng)目,選擇最新的MVC框架,使用Jquery腳本庫(kù)。2. BLL業(yè)務(wù)邏輯業(yè)務(wù)邏輯的操作,包括業(yè)務(wù)處理,事務(wù)等。3. DAL數(shù)據(jù)訪問(wèn)數(shù)據(jù)庫(kù)訪問(wèn)的操作,數(shù)據(jù)實(shí)體,業(yè)務(wù)實(shí)體
3、,數(shù)據(jù)校驗(yàn),使用Entity Framework。4. IBLL業(yè)務(wù)接口業(yè)務(wù)邏輯層的方法對(duì)外暴露的接口和服務(wù)契約。5. Common公共組件整個(gè)應(yīng)用程序使用的公共輔助方法。6. ModelingProject模型設(shè)計(jì)在此設(shè)計(jì)項(xiàng)目的圖例,如:架構(gòu)圖。7. WcfHost服務(wù)宿主為對(duì)外的服務(wù)提供宿主,使用微軟WCF技術(shù)。8. WFActivitys工作流活動(dòng)層定義了工作流的活動(dòng),使用微軟WF技術(shù)。9. WFDesigner工作流設(shè)計(jì)器實(shí)施人員自由配置工作流的設(shè)計(jì)器,使用微軟WPF技術(shù)。以上是在架構(gòu)圖的框架下設(shè)計(jì)的9個(gè)組件,我們結(jié)合架構(gòu)圖一起分析: 1. 展示層,包含App和WFDesigner項(xiàng)目
4、2. 業(yè)務(wù)邏輯層,包含BLL,IBLL和WFActivitys項(xiàng)目3. 數(shù)據(jù)訪問(wèn)層,包含DAL項(xiàng)目4. 服務(wù)層,包含WcfHost項(xiàng)目5. 公共組件層,包含Common項(xiàng)目“數(shù)據(jù)實(shí)體”在DAL層中,是Entity Framework自動(dòng)生成的實(shí)體;“業(yè)務(wù)實(shí)體”是基于“數(shù)據(jù)實(shí)體”進(jìn)行擴(kuò)展的實(shí)體,或者自定義的實(shí)體。因?yàn)槭腔贓ntity Framework自動(dòng)生成的數(shù)據(jù)實(shí)體,所以也放在DAL層中。另外,數(shù)據(jù)實(shí)體和業(yè)務(wù)實(shí)體集成了數(shù)據(jù)驗(yàn)證的作用。注意:因?yàn)椤皹I(yè)務(wù)實(shí)體”也放在DAL訪問(wèn)層中,所以展示層(App)也需要引用數(shù)據(jù)訪問(wèn)層,但此處約定不許在展示層做數(shù)據(jù)庫(kù)操作。數(shù)據(jù)訪問(wèn)層僅僅負(fù)責(zé)管理數(shù)據(jù)庫(kù)與業(yè)務(wù)邏
5、輯層之間的通訊,不負(fù)責(zé)業(yè)務(wù)邏輯。技術(shù)上我們采用Entity Framework ,它是微軟開(kāi)發(fā)的基于ADO.NET的ORM(Object/Relational Mapping)框架。Entity Framework的主要特點(diǎn):1. 支持多種數(shù)據(jù)庫(kù)(Microsoft SQL Server, Oracle, and MySQL);2. 能很好地支持表,視圖和存儲(chǔ)過(guò)程;3. 提供Visual Studio集成工具,進(jìn)行可視化操作;創(chuàng)建ADO.NET 實(shí)體數(shù)據(jù)模型項(xiàng)目在項(xiàng)目上點(diǎn)擊右鍵,添加->新建項(xiàng)選擇“ADO.NET 實(shí)體數(shù)據(jù)模型”從數(shù)據(jù)庫(kù)生成,新建連接,選擇數(shù)據(jù)源填寫(xiě)連接需要的數(shù)據(jù)庫(kù)信息后
6、,點(diǎn)擊下一步注意:只選擇“在模型中加入外鍵列”可以看到新生成了兩個(gè)文件“App.Config”和“Model1.edmx”:“App.Config”里面是數(shù)據(jù)庫(kù)連接字符串“Model1.edmx” 里面是數(shù)據(jù)實(shí)體類(lèi)和訪問(wèn)數(shù)據(jù)庫(kù)的上下文注意:Model1.edmx文件是Entity Framework自動(dòng)生成的,不做修改,因?yàn)槊看胃聲?huì)覆蓋。分析總結(jié)我們將系統(tǒng)需要的基礎(chǔ)類(lèi)放在“Framework”文件夾中,所有的實(shí)體數(shù)據(jù)都需要繼承IBaseEntity接口,所有的數(shù)據(jù)庫(kù)表操作都需要繼承BaseRepository抽象類(lèi),所有視圖操作都需要繼承BaseViewRepository抽象類(lèi)下面我們以S
7、ysException單表的增刪改為例,進(jìn)行介紹:這里使用了分部類(lèi)(partial class)對(duì)實(shí)體數(shù)據(jù)SysException進(jìn)行擴(kuò)展,加入自定義的屬性,使用SysExceptionMetadata類(lèi)對(duì)SysException進(jìn)行數(shù)據(jù)驗(yàn)證,以保障數(shù)據(jù)的完整性和正確性。數(shù)據(jù)訪問(wèn)層中的SysExceptionRepository執(zhí)行數(shù)據(jù)庫(kù)中的增刪改查操作。以上我們完成了數(shù)據(jù)訪問(wèn)層的設(shè)計(jì),此架構(gòu)的代碼實(shí)現(xiàn),請(qǐng)參考業(yè)務(wù)邏輯層是應(yīng)用程序的大腦1. 負(fù)責(zé)處理系統(tǒng)的核心業(yè)務(wù),2. 負(fù)責(zé)對(duì)用戶(hù)定義的流程進(jìn)行建模,3. 負(fù)責(zé)數(shù)據(jù)訪問(wèn)層和展示層的通訊,4. 不能因?yàn)閿?shù)據(jù)庫(kù)的變換而變化,也不能因?yàn)榻K端的變換而變
8、化。下面是業(yè)務(wù)邏輯層的具體實(shí)現(xiàn)1. BLL業(yè)務(wù)邏輯業(yè)務(wù)邏輯的操作,包括業(yè)務(wù)處理,調(diào)用數(shù)據(jù)訪問(wèn),事務(wù)等。2. IBLL業(yè)務(wù)接口業(yè)務(wù)邏輯層的方法對(duì)外暴露的接口和服務(wù)契約3. WFActivitys工作流活動(dòng)層定義了工作流中使用的活動(dòng)業(yè)務(wù)的最小邏輯單元因?yàn)榉?wù)層和展示層都會(huì)調(diào)用業(yè)務(wù)邏輯層,所以在此層做事務(wù)、異常和并發(fā)的處理比較合理。l 事務(wù)的使用首先,引用“using System.Transactions;”命名空間,調(diào)用TransactionScope類(lèi)l 異常的處理l 并發(fā)的處理更新的時(shí)候會(huì)面臨一個(gè)難點(diǎn),假設(shè)某條記錄同時(shí)被兩個(gè)人A和B讀取并且正在修改。A先修改完成然后保存了,然后B再保存的時(shí)候
9、,會(huì)由于時(shí)間戳不一致(因?yàn)锳之前先保存修改了時(shí)間戳)導(dǎo)致B保存失敗。給一個(gè)表加一個(gè)時(shí)間戳字段Timestamp,可以有效的解決數(shù)據(jù)庫(kù)并發(fā)問(wèn)題。我們約定1. 將系統(tǒng)需要的基礎(chǔ)類(lèi)放在"Framework"文件夾中2. 在此層做事務(wù)、異常和并發(fā)的處理3. 對(duì)外暴露的方法,必須繼承自IBLL項(xiàng)目的接口以上我們完成了業(yè)務(wù)邏輯層的設(shè)計(jì),此架構(gòu)的代碼實(shí)現(xiàn),請(qǐng)參考展示層,它負(fù)責(zé)系統(tǒng)與客戶(hù)的交互,我們以BS架構(gòu)的項(xiàng)目為例。我們選擇MVC 框架,這是一個(gè)展示層的框架哦。Content文件夾放置項(xiàng)目的樣式文件IndexStyle.css是所有列表頁(yè)面的樣式StyleSheet.css是所有增加修
10、改詳細(xì)頁(yè)面的樣式Controllers文件夾放置mvc框架的控制器HomeController.cs登陸后的主頁(yè)面Codes文件夾放置基礎(chǔ)框架的模型LogClassModels.cs日志模型BaseController.cs控制器的基類(lèi)SupportFilter.cs全局的過(guò)濾器SysFieldModels.cs數(shù)據(jù)字典模型HtmlHelper文件夾放置mvc框架的模型CheckBoxListHelper.cs是CheckBoxList的輔助方法Easyui.cs是Easyui套件對(duì)應(yīng)的后臺(tái)Cs代碼FileUploaderHandler.cs頁(yè)面上傳的控制類(lèi)RadioButtonListHel
11、per.cs是RadioButtonList的輔助方法Res文件夾放置第三方的頁(yè)面套件Easyui文件夾是easyui的套件jquery.uploadify-v2.1.4是上傳套件My97DatePicker是時(shí)間套件Scirpts文件夾放置項(xiàng)目使用的js文件jquery.min.js是jquery文件JScriptCommon.js自定義的js文件JScriptIndex.js列表頁(yè)面的jsUp文件夾放置上傳的文件Views文件夾放置mvc框架的展示視圖Home文件夾:Index.aspx登陸后主頁(yè)Shared文件夾是母版頁(yè)的存放位置WorkFlow文件夾放置設(shè)計(jì)的工作流Global.asa
12、x文件是項(xiàng)目的路由和全局信息Web.config文件時(shí)項(xiàng)目的配置信息請(qǐng)看展示層(MVC框架)在四層架構(gòu)設(shè)計(jì)圖的位置:我們約定:1. 將系統(tǒng)App項(xiàng)目需要的基礎(chǔ)類(lèi)放在"Models"文件夾中2. 所有的控制器都需要繼承BaseController類(lèi)3. 遵循“胖業(yè)務(wù)邏輯層,瘦展示層”的原則以上我們完成了展示層的設(shè)計(jì),此架構(gòu)的代碼實(shí)現(xiàn),請(qǐng)參考公共層(Common),它負(fù)責(zé)系統(tǒng)整個(gè)應(yīng)用程序使用的公共輔助方法。所有層都可以引用并調(diào)用Common中的類(lèi)和方法。EncryptAndDecrypte.cs保證系統(tǒng)安全的加解密方法NetSendMail.cs發(fā)送郵件Result.cs產(chǎn)生主
13、鍵的地方Suggestion.cs提示信息ValidationError.cs業(yè)務(wù)層向展示層提供的錯(cuò)誤信息ValueConvert.cs數(shù)據(jù)轉(zhuǎn)換WFHelp.cs工作流的輔助類(lèi)日志處理功能的設(shè)計(jì)為了記錄客戶(hù)在業(yè)務(wù)系統(tǒng)中的操作,為了記錄系統(tǒng)運(yùn)行過(guò)程中產(chǎn)生的數(shù)據(jù),我們需要將這些操作和數(shù)據(jù)記錄到日志功能中。日志處理功能需要實(shí)現(xiàn):可以通過(guò)簡(jiǎn)單配置就對(duì)所有需要記錄的地方統(tǒng)一開(kāi)啟或者關(guān)閉也可以個(gè)性化的開(kāi)啟或者關(guān)閉日志功能通過(guò)在Web.config文件上配置,就可以實(shí)現(xiàn)統(tǒng)一控制記錄日志的功能是否開(kāi)啟<!-是否記錄操作日志(true:是,false:否)-><add key="LogEnabled" value="false" />在記錄日志的方法中加入一個(gè)有默認(rèn)值的參數(shù)LogOpration logOpration public static void WriteServiceLog(string message, string menu, LogOpration logOpration = LogOpration.Default)/寫(xiě)入日志的靜態(tài)方法 只需要在需要記錄日志的地方加上如下方法LogClassModels.WriteServiceLog(Suggestion.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政管理專(zhuān)科語(yǔ)文實(shí)踐要求試題及答案
- 浙江國(guó)企招聘2025臺(tái)州市海洋投資發(fā)展集團(tuán)有限公司招聘11人筆試參考題庫(kù)附帶答案詳解
- 2025物流配送合作協(xié)議合同范本
- 執(zhí)業(yè)護(hù)士現(xiàn)場(chǎng)應(yīng)對(duì)策略分享試題及答案
- 執(zhí)業(yè)護(hù)士備考中需要掌握的技能試題及答案
- 醫(yī)療設(shè)備保險(xiǎn)政策對(duì)護(hù)理工作的影響分析
- 正多邊形與圓的周長(zhǎng)、弧長(zhǎng)及扇形面積課件
- 醫(yī)療器械的智能化與自動(dòng)化技術(shù)
- 行政管理經(jīng)濟(jì)法概論在線學(xué)習(xí)資源與試題及答案
- 會(huì)計(jì)職業(yè)證書(shū)獲取的時(shí)間表計(jì)劃
- 2025年郵政社招筆試試題及答案
- 2025年保密觀知識(shí)測(cè)試題及答案
- 3D打印技術(shù)與應(yīng)用智慧樹(shù)知到期末考試答案2024年
- 合作取得更大的成功辯論稿范文六篇
- 三年級(jí)數(shù)學(xué)下冊(cè)《面積》練習(xí)試卷及答案
- 室內(nèi)裝飾醫(yī)療貝斯板技術(shù)交底
- 會(huì)計(jì)師事務(wù)所自查自糾報(bào)告范文3篇
- 信用評(píng)級(jí)ppt全套教學(xué)課件
- 2022年煙臺(tái)毓璜頂醫(yī)院醫(yī)護(hù)人員招聘考試筆試題庫(kù)及答案解析
- 現(xiàn)場(chǎng)跟蹤審計(jì)工作要點(diǎn)
- 公制螺紋公差速查表
評(píng)論
0/150
提交評(píng)論