<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ABP理論學(xué)習(xí)之N層架構(gòu)

      返回總目錄


      自從寫這個(gè)系列博客之后,發(fā)現(xiàn)很多園友還是希望有個(gè)直接運(yùn)行的demo,其實(shí)在github上就有官方的demo,我直接把這demo的鏈接放到這里吧,另外,我分析,這些找不到demo的同學(xué),很可能是不怎么用github,可能的原因就是英文不好。所以還是希望程序員多看看英文文檔,一開始看得很慢不要緊,時(shí)間久了,速度絕對(duì)能上去。因?yàn)槎际羌夹g(shù)性的文章,沒有特別難的語法,能讓大家退而卻步的最多是些生詞,這個(gè)就要靠大家積累常見的詞匯了,一些生僻詞的話查一下意思,理解了那句話就可以過了。

      跟ABP相關(guān)的所有源碼,包括zero,demo,都在這個(gè)目錄下了,大家可以一個(gè)個(gè)點(diǎn)擊看一下。下面做一稍微解釋。




      本篇目錄

      介紹###

      對(duì)應(yīng)用代碼基進(jìn)行分層可以幫助降低復(fù)雜度和提高代碼復(fù)用性,這已經(jīng)成為廣為接受的技巧。為了實(shí)現(xiàn)分層的架構(gòu),ABP遵循以下DDD(領(lǐng)域驅(qū)動(dòng)模型)的原則。在DDD中,有四個(gè)基礎(chǔ)層:

      • 表現(xiàn)層:用戶訪問的接口,使用應(yīng)用層實(shí)現(xiàn)用戶交互。
      • 應(yīng)用層:表現(xiàn)層和領(lǐng)域?qū)又g的媒介。負(fù)責(zé)組織業(yè)務(wù)對(duì)象,以執(zhí)行特定的應(yīng)用任務(wù)。
      • 領(lǐng)域?qū)?/strong>:包括業(yè)務(wù)對(duì)象和原則。這是應(yīng)用的核心。
      • 基礎(chǔ)設(shè)施層:為支持更高層提供了廣泛的技術(shù)能力。基礎(chǔ)設(shè)施層的一個(gè)例子是倉(cāng)儲(chǔ),它可以通過ORM框架和數(shù)據(jù)庫(kù)進(jìn)行交互。

      也可能會(huì)加入額外必要的層。以下就是一個(gè)例子:

      • 分布式服務(wù)層:將應(yīng)用的功能暴露給遠(yuǎn)程客戶端。可以提供這個(gè)層的工具包括Asp.Net Web API和WCF。

      這些都是以領(lǐng)域?yàn)橹行牡募軜?gòu)的通用層次。基于實(shí)現(xiàn)的話,可能還會(huì)稍有不同。

      ABP架構(gòu)###

      層次和結(jié)構(gòu)的概覽如下圖所示:

      實(shí)際解決方案中的項(xiàng)目分層如下:

      一層可以為一個(gè)或多個(gè)程序集。對(duì)于第三方依賴創(chuàng)建不止一個(gè)程序集可能會(huì)特別好(比如NHibernate)。

      領(lǐng)域?qū)?/h4>

      領(lǐng)域?qū)邮撬械臉I(yè)務(wù)規(guī)則實(shí)現(xiàn)的地方。

      實(shí)體代表了業(yè)務(wù)領(lǐng)域的數(shù)據(jù)和操作。在實(shí)踐中,它們一般會(huì)映射到數(shù)據(jù)庫(kù)的表中。

      倉(cāng)儲(chǔ)式跟集合很像的對(duì)象,使用倉(cāng)儲(chǔ)可以檢索數(shù)據(jù)源(數(shù)據(jù)庫(kù))上的實(shí)體,并將實(shí)體持久化到數(shù)據(jù)源上。領(lǐng)域?qū)又皇嵌x了倉(cāng)儲(chǔ),但是并沒有實(shí)現(xiàn)它們,它們是在基礎(chǔ)設(shè)施層實(shí)現(xiàn)的。

      領(lǐng)域事件定義了領(lǐng)域特定的事件,也包括觸發(fā)和處理這些事件。領(lǐng)域服務(wù)借助實(shí)體運(yùn)行,并實(shí)現(xiàn)了不屬于單個(gè)實(shí)體的業(yè)務(wù)規(guī)則。

      工作單元是一種管理實(shí)體的設(shè)計(jì)模式,這些實(shí)體受業(yè)務(wù)邏輯影響,并將狀態(tài)持久化到數(shù)據(jù)存儲(chǔ)中。

      領(lǐng)域?qū)討?yīng)該盡可能地獨(dú)立于第三方的庫(kù)。

      應(yīng)用層

      應(yīng)用層包含了展現(xiàn)層使用的應(yīng)用服務(wù)。應(yīng)用服務(wù)方法接收一個(gè)DTO(數(shù)據(jù)傳輸對(duì)象)作為輸入?yún)?shù),使用這個(gè)輸入對(duì)象執(zhí)行一些特定的領(lǐng)域?qū)硬僮鳎缓螅绻枰脑挘赡芊祷亓硪粋€(gè)DTO。一般而言,應(yīng)用服務(wù)方法不接收或者返回一個(gè)實(shí)體對(duì)象,這樣做的好處就是可以允許展現(xiàn)層可以從領(lǐng)域?qū)又袑?shí)體抽象出來,而不受實(shí)體的約束。一個(gè)應(yīng)用服務(wù)方法一般被看作是一個(gè)工作單元。用戶輸入驗(yàn)證也是在這一層實(shí)現(xiàn)的。ABP提供了一個(gè)基礎(chǔ)設(shè)施,因此可以很容易地實(shí)現(xiàn)驗(yàn)證。建議使用一個(gè)將實(shí)體映射為DTO的工具,比如AutoMapper,TinyMapper等。要學(xué)習(xí)AutoMapper的使用,請(qǐng)查看我的AutoMapper系列博客吧!

      基礎(chǔ)設(shè)施層

      雖然領(lǐng)域?qū)佣x了倉(cāng)儲(chǔ)接口,但是基礎(chǔ)設(shè)施層使用諸如NHibernate或者EntityFramework的ORM工具實(shí)現(xiàn)了那些倉(cāng)儲(chǔ)接口。ABP提供了使用這兩種ORM框架的基類。基礎(chǔ)設(shè)施層用于抽象來自其他層的第三方類庫(kù),數(shù)據(jù)庫(kù)遷移(Database Migration)也可以用在這一層。

      Web和展現(xiàn)層

      Web層使用ASP.NET MVC和Web API實(shí)現(xiàn)的。這里可以使用兩種不同的方式來實(shí)現(xiàn):?jiǎn)雾撁鎽?yīng)用和多頁面應(yīng)用。

      在單頁面應(yīng)用中(SPA),所有的資源都會(huì)一次性加載到客戶端(或者只加載核心資源,懶加載其他資源),所有的后續(xù)和服務(wù)器的交互都是通過Ajax調(diào)用。Html代碼是使用從服務(wù)端接收到的數(shù)據(jù)在客戶端生成的。整個(gè)頁面不會(huì)刷新,視圖只是在必要時(shí)換入換出。有許多的Javascript SPA框架,比如AngularJs,DurandalJs,BackboneJs和EmberJs。ABP可以使用它們中的任何一個(gè),但是提供了使用 AngularJs和DurandalJs的樣例。

      在多頁面(經(jīng)典)應(yīng)用中(MPA),客戶端向服務(wù)端發(fā)送請(qǐng)求,服務(wù)端代碼(ASP.NET MVC 控制器)從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),然后Razor視圖引擎生成html 代碼。這些編譯后的頁面發(fā)回給客戶端顯示。每個(gè)新的頁面都會(huì)導(dǎo)致完整頁面的刷新。

      SPA和MPA涉及了完全不同的架構(gòu)。對(duì)于后臺(tái)管理系統(tǒng)來說,SPA是最好的候選者,另一方面,博客更適合MPA模型,因?yàn)椴┛涂释凰阉饕孀ト?shù)據(jù)。雖然有很多工具可以使SPA對(duì)于搜索引擎可見,但是目前的一般做法就是使用MPA。

      SignalR是發(fā)送服務(wù)端到客戶端的推送通知的最好工具,也可以給用戶提供一個(gè)豐富而且實(shí)時(shí)的體驗(yàn)。

      在客戶端還有很多javascript庫(kù)和框架。jQuery是這個(gè)領(lǐng)域最流行的,并伴有成千上萬的插件。也有很多很容易就能使用Html和CSS的框架或工具。比如,Twitter Bootstrap是非常流行的HTML/CSS框架。

      ABP提供了使用應(yīng)用服務(wù)層自動(dòng)創(chuàng)建Web API層的基礎(chǔ)設(shè)施,使用Javascript可以輕松地調(diào)用Web API(看文檔)。而且,還提供了管理管理應(yīng)用菜單,本地化以及語言切換的基礎(chǔ)設(shè)施,還包含了統(tǒng)一的Javascript API來簡(jiǎn)化顯示系統(tǒng)的信息和通知。

      ABP自動(dòng)處理服務(wù)端的異常,并給客戶端返回一個(gè)合適的響應(yīng)。

      其他

      ABP通過Castle Windsor使用并支持依賴注入,也使用了Log4Net來記錄服務(wù)端的日志,然而,通過使用Castle的日志設(shè)備無需改變代碼就可以切換到其他的日志庫(kù)。

      總結(jié)###

      ABP平衡了一些最好的框架或者類庫(kù),除此之外,ABP自己的類和系統(tǒng)也提供了一個(gè)很好的用于N層架構(gòu)Web應(yīng)用構(gòu)建的基礎(chǔ)設(shè)施,也提供了很輕松地創(chuàng)建分層的解決方案的模板,用作應(yīng)用的起點(diǎn)。

      posted @ 2015-12-11 13:16  tkbSimplest  閱讀(28467)  評(píng)論(10)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产一区二区三区怡红院| 亚洲の无码国产の无码步美| 噜噜综合亚洲av中文无码| 成人午夜福利视频后入| 欧美激情一区二区久久久| 激情综合网激情五月我去也 | 国产日产欧产系列| 丰满少妇被猛烈进出69影院| 国产av亚洲精品ai换脸电影| 午夜DY888国产精品影院| 国产精品高清一区二区三区不卡| 亚洲精品人妻中文字幕| 男人的天堂av社区在线| 无码人妻丰满熟妇区毛片| 日韩人妻无码一区二区三区俄罗斯 | 亚洲中文字幕在线二页| 99re热视频这里只精品| 国产精品免费第一区二区| 人妻中文字幕精品系列| 永城市| 成人午夜在线观看刺激| 国产网友愉拍精品视频手机 | 色综合国产一区二区三区| 精品国产综合一区二区三区| 99在线视频免费观看| 国产怡春院无码一区二区| 亚洲一区二区三区啪啪| 波多野结衣乳喷高潮视频 | 国产精品美女AV免费观看| 沛县| 国产精品午夜无码AV天美传媒 | 99久久亚洲综合精品成人网| 精品一区二区三区蜜桃麻豆| 女人腿张开让男人桶爽| 精品无码一区二区三区电影| 亚洲欧美高清在线精品一区二区| 久久se精品一区精品二区| 亚洲中文字幕成人综合网| 国产盗摄xxxx视频xxxx| 拉孜县| 成在线人永久免费视频播放|