校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解

ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解

熱門標(biāo)簽:蘇州如何辦理400電話 外呼電話機(jī)器人成本 網(wǎng)絡(luò)電話外呼系統(tǒng)上海 400電話辦理怎么樣 地圖標(biāo)注軟件免費(fèi)下載 西寧呼叫中心外呼系統(tǒng)線路商 百應(yīng)電話機(jī)器人外呼系統(tǒng) 臨沂智能電話機(jī)器人加盟 聯(lián)通官網(wǎng)400電話辦理

DDD分層
為了減少?gòu)?fù)雜性和提高代碼的可重用性,采用分層架構(gòu)是一種被廣泛接受的技術(shù)。
為了實(shí)現(xiàn)分層的體系結(jié)構(gòu),ABP遵循DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))的原則,將分為四個(gè)層次:

  • 展現(xiàn)層(Presentation):提供一個(gè)用戶界面,實(shí)現(xiàn)用戶交互操作。
  • 應(yīng)用層(Application):進(jìn)行展現(xiàn)層與領(lǐng)域?qū)又g的協(xié)調(diào),協(xié)調(diào)業(yè)務(wù)對(duì)象來執(zhí)行特定的應(yīng)用程序的任務(wù)。它不包含業(yè)務(wù)邏輯。
  • 領(lǐng)域?qū)樱―omain):包括業(yè)務(wù)對(duì)象和業(yè)務(wù)規(guī)則,這是應(yīng)用程序的核心層。
  • 基礎(chǔ)設(shè)施層(Infrastructure):提供通用技術(shù)來支持更高的層。例如基礎(chǔ)設(shè)施層的倉(cāng)儲(chǔ)(Repository)可通過ORM來實(shí)現(xiàn)數(shù)據(jù)庫(kù)交互。

根據(jù)實(shí)際需要,可能會(huì)有額外添加的層。例如:

分布式服務(wù)層(Distributed Service):用于公開應(yīng)用程序接口供遠(yuǎn)程客戶端調(diào)用。比如通過ASP.NET Web API和WCF來實(shí)現(xiàn)。
這些都是常見的以領(lǐng)域?yàn)橹行牡姆謱芋w系結(jié)構(gòu)。不同的項(xiàng)目在實(shí)現(xiàn)上可能會(huì)有細(xì)微的差別。


ABP的體系結(jié)構(gòu)

一個(gè)簡(jiǎn)單的解決方案,大致包含5個(gè)項(xiàng)目:

每一層可以用一個(gè)或多個(gè)程序集來實(shí)現(xiàn)。
1.領(lǐng)域?qū)樱―omain)
        領(lǐng)域?qū)泳褪菢I(yè)務(wù)層,是一個(gè)項(xiàng)目的核心,所有業(yè)務(wù)規(guī)則都應(yīng)該在領(lǐng)域?qū)訉?shí)現(xiàn)。
2.實(shí)體(Entity)
  實(shí)體代表業(yè)務(wù)領(lǐng)域的數(shù)據(jù)和操作,在實(shí)踐中,通過用來映射成數(shù)據(jù)庫(kù)表。
3.倉(cāng)儲(chǔ)(Repository)
  倉(cāng)儲(chǔ)用來操作數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存取。倉(cāng)儲(chǔ)接口在領(lǐng)域?qū)佣x,而倉(cāng)儲(chǔ)的實(shí)現(xiàn)類應(yīng)該寫在基礎(chǔ)設(shè)施層。
4.領(lǐng)域服務(wù)(Domain service)
  當(dāng)處理的業(yè)務(wù)規(guī)則跨越兩個(gè)(及以上)實(shí)體時(shí),應(yīng)該寫在領(lǐng)域服務(wù)方法里面。
5.領(lǐng)域事件(Domain Event)
  在領(lǐng)域?qū)幽承┨囟ㄇ闆r發(fā)生時(shí)可以觸發(fā)領(lǐng)域事件,并且在相應(yīng)地方捕獲并處理它們。
6.工作單元(Unit of Work)
  工作單元是一種設(shè)計(jì)模式,用于維護(hù)一個(gè)由已經(jīng)被修改(如增加、刪除和更新等)的業(yè)務(wù)對(duì)象組成的列表。它負(fù)責(zé)協(xié)調(diào)這些業(yè)務(wù)對(duì)象的持久化工作及并發(fā)問題。


應(yīng)用層(Application)
應(yīng)用層提供一些應(yīng)用服務(wù)(Application Services)方法供展現(xiàn)層調(diào)用。一個(gè)應(yīng)用服務(wù)方法接收一個(gè)DTO(數(shù)據(jù)傳輸對(duì)象)作為輸入?yún)?shù),使用這個(gè)輸入?yún)?shù)執(zhí)行特定的領(lǐng)域?qū)硬僮鳎⒏鶕?jù)需要可返回另一個(gè)DTO。在展現(xiàn)層到領(lǐng)域?qū)又g,不應(yīng)該接收或返回實(shí)體(Entity)對(duì)象,應(yīng)該進(jìn)行DTO映射。一個(gè)應(yīng)用服務(wù)方法通常被認(rèn)為是一個(gè)工作單元(Unit of Work)。用戶輸入?yún)?shù)的驗(yàn)證工作也應(yīng)該在應(yīng)用層實(shí)現(xiàn)。ABP提供了一個(gè)基礎(chǔ)架構(gòu)讓我們很容易地實(shí)現(xiàn)輸入?yún)?shù)有效性驗(yàn)證。建議使用一種像AutoMapper這樣的工具來進(jìn)行實(shí)體與DTO之間的映射。
 
基礎(chǔ)設(shè)施層(Infrastructure)
當(dāng)在領(lǐng)域?qū)又袨槎x了倉(cāng)儲(chǔ)接口,應(yīng)該在基礎(chǔ)設(shè)施層中實(shí)現(xiàn)這些接口。可以使用ORM工具,例如EntityFramework或NHibernate。ABP的基類已經(jīng)提供了對(duì)這兩種ORM工具的支持。數(shù)據(jù)庫(kù)遷移也被用于這一層。
 
WEB與展現(xiàn)層(Web Presentation)
Web層使用ASP.NET MVC和Web API來實(shí)現(xiàn)。可分別用于多頁(yè)面應(yīng)用程序(MPA)和單頁(yè)面應(yīng)用程序(SPA)。
在SPA中,所有資源被一次加載到客戶端瀏覽器中(或者先只加載核心資源,其他資源懶加載),然后通過AJAX調(diào)用服務(wù)端WebApi接口獲取數(shù)據(jù),再根據(jù)數(shù)據(jù)生成HTML代碼。不會(huì)整個(gè)頁(yè)面刷新。現(xiàn)在已經(jīng)有很多SPA的JS框架,例如: AngularJs、 DurandalJs、BackboneJs、EmberJs。 ABP可以使用任何類似的前端框架,但是ABP提供了一些幫助類,讓我們更方便地使用AngularJs和DurandalJs。
在經(jīng)典的多頁(yè)面應(yīng)用(MPA)中,客戶端向服務(wù)器端發(fā)出請(qǐng)求,服務(wù)器端代碼(ASP.NET MVC控制器)從數(shù)據(jù)庫(kù)獲得數(shù)據(jù),并且使用Razor視圖生成HTML。這些被生成后的HTML頁(yè)面被發(fā)送回客戶端顯示。每顯示一個(gè)新的頁(yè)面都會(huì)整頁(yè)刷新。
SPA和MPA涉及到完全不同的體系結(jié)構(gòu),也有不同的應(yīng)用場(chǎng)景。一個(gè)管理后臺(tái)適合用SPA,博客就更適合用MPA,因?yàn)樗诒凰阉饕孀ト ?br /> SignalR是一種從服務(wù)器到客戶端發(fā)送推送通知的完美工具。它能給用戶提供豐富的實(shí)時(shí)的體驗(yàn)。
已經(jīng)有很多客戶端的Javascript框架或庫(kù),JQuery是其中最流行的,并且它有成千上萬免費(fèi)的插件。使用Bootstrap可以讓我們更輕松地完成寫Html和CSS的工作。
ABP也實(shí)現(xiàn)了根據(jù)Web API接口自動(dòng)創(chuàng)建 Javascript的代碼函數(shù),來簡(jiǎn)化JS對(duì)Web Api的調(diào)用。還有把服務(wù)器端的菜單、語言、設(shè)置等生成到JS端。(但是在我自己的項(xiàng)目中,我是把這些自動(dòng)生成功能關(guān)閉的,因?yàn)楸匾圆皇呛艽螅@些又會(huì)比較影響性能)。
ABP會(huì)自動(dòng)處理服務(wù)器端返回的異常,并以友好的界面提示用戶。


ABP模塊系統(tǒng)
ABP框架提供了創(chuàng)建和組裝模塊的基礎(chǔ),一個(gè)模塊能夠依賴于另一個(gè)模塊。在通常情況下,一個(gè)程序集就可以看成是一個(gè)模塊。在ABP框架中,一個(gè)模塊通過一個(gè)類來定義,而這個(gè)類要繼承自AbpModule。
譯者注:如果學(xué)習(xí)過Orchard的朋友,應(yīng)該知道m(xù)odule模塊的強(qiáng)大了。模塊的本質(zhì)就是可重用性,你可以在任意的地方去調(diào)用,而且通過實(shí)現(xiàn)模塊,你寫的模塊也可以給別人用。
Assembly程序集:Assembly是一個(gè)包含來程序的名稱,版本號(hào),自我描述,文件關(guān)聯(lián)關(guān)系和文件位置等信息的一個(gè)集合。最簡(jiǎn)單的理解就是:一個(gè)你自己寫的類庫(kù)生成的dll就可以看做是一個(gè)程序集,這個(gè)程序集可以包括很多類,類又包括很多方法等。
.net可以通過反射獲取一個(gè)程序集中的類以及方法。
下面的例子,我們開發(fā)一個(gè)可以在多個(gè)不同應(yīng)用中被調(diào)用MybolgApplication模塊,代碼如下:

public class MyBlogApplicationModule : AbpModule //定義
{
 public override void Initialize() //初始化
 {
 IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
 //這行代碼的寫法基本上是不變的。它的作用是把當(dāng)前程序集的特定類或接口注冊(cè)到依賴注入容器中。
 }
}

ABP框架會(huì)掃描所有的程序集,并且發(fā)現(xiàn)AbpModule類中所有已經(jīng)導(dǎo)入的所有類,如果你已經(jīng)創(chuàng)建了包含多個(gè)程序集的應(yīng)用,對(duì)于ABP,我們的建議是為每一個(gè)程序集創(chuàng)建一個(gè)Module(模塊)。
生命期事件
在一個(gè)應(yīng)用中,abp框架調(diào)用了Module模塊的一些指定的方法來進(jìn)行啟動(dòng)和關(guān)閉模塊的操作。我們可以重載這些方法來完成我們自己的任務(wù)。
ABP框架通過依賴關(guān)系的順序來調(diào)用這些方法,假如:模塊A依賴于模塊B,那么模塊B要在模塊A之前初始化,模塊啟動(dòng)的方法順序如下:

  • PreInitialize-B
  • PreInitialize-A
  • Initialize-B
  • Initialize-A
  • PostInitialize-B
  • PostInitialize-A

下面是具體方法的說明:

1.PreInitialize
預(yù)初始化:當(dāng)應(yīng)用啟動(dòng)后,第一次會(huì)調(diào)用這個(gè)方法。在依賴注入注冊(cè)之前,你可以在這個(gè)方法中指定自己的特別代碼。舉個(gè)例子吧:假如你創(chuàng)建了一個(gè)傳統(tǒng)的登記類,那么你要先注冊(cè)這個(gè)類(使用IocManager對(duì)登記類進(jìn)行注冊(cè)),你可以注冊(cè)事件到IOC容器。等。
2.Initialize
初始化:在這個(gè)方法中一般是來進(jìn)行依賴注入的注冊(cè),一般我們通過IocManager.RegisterAssemblyByConvention這個(gè)方法來實(shí)現(xiàn)。如果你想實(shí)現(xiàn)自定義的依賴注入,那么請(qǐng)參考依賴注入的相關(guān)文檔。
3.PostInitialize
提交初始化:最后一個(gè)方法,這個(gè)方法用來解析依賴關(guān)系。
4.Shutdown
關(guān)閉:當(dāng)應(yīng)用關(guān)閉以后,這個(gè)方法被調(diào)用。
 
模塊依賴(Module dependencies)
Abp框架會(huì)自動(dòng)解析模塊之間的依賴關(guān)系,但是我們還是建議你通過重載GetDependencies方法來明確的聲明依賴關(guān)系。

[DependsOn(typeof(MyBlogCoreModule))]//通過注解來定義依賴關(guān)系
public class MyBlogApplicationModule : AbpModule
{
 public override void Initialize()
 {
  IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
 }
}

例如上面的代碼,我們就聲明了MyBlogApplicationModule和MyBlogCoreModule的依賴關(guān)系(通過屬性attribute),MyBlogApplicationModule這個(gè)應(yīng)用模塊依賴于MyBlogCoreModule核心模塊,并且,MyBlogCoreModule核心模塊會(huì)在MyBlogApplicationModule模塊之前進(jìn)行初始化。
 
如何自定義的模塊方法
我們自己定義的模塊中可能有方法被其他依賴于當(dāng)前模塊的模塊調(diào)用,下面的例子,假設(shè)模塊2依賴于模塊1,并且想在預(yù)初始化的時(shí)候調(diào)用模塊1的方法。

public class MyModule1 : AbpModule
{
 public override void Initialize() //初始化模塊
 {
 IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());//這里,進(jìn)行依賴注入的注冊(cè)。
 }
 public void MyModuleMethod1()
 {
 //這里寫自定義的方法。
 }
}
[DependsOn(typeof(MyModule1))]
public class MyModule2 : AbpModule
{
 private readonly MyModule1 _myModule1;
 public MyModule2(MyModule1 myModule1)
 {
 _myModule1 = myModule1;
 }
 public override void PreInitialize()
 {
 _myModule1.MyModuleMethod1(); //調(diào)用MyModuleMethod1的方法。
 }
 public override void Initialize()
 {
 IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
 }
}

就這樣,就把模塊1注入到了模塊2,因此,模塊2就能調(diào)用模塊1的方法了。

您可能感興趣的文章:
  • 解析ABP框架中的數(shù)據(jù)傳輸對(duì)象與應(yīng)用服務(wù)
  • ABP框架中的日志功能完全解析
  • 詳解ABP框架的參數(shù)有效性驗(yàn)證和權(quán)限驗(yàn)證
  • 詳解ABP框架中領(lǐng)域?qū)拥念I(lǐng)域事件Domain events
  • 解析ABP框架中的事務(wù)處理和工作單元
  • 詳解ABP框架中的數(shù)據(jù)過濾器與數(shù)據(jù)傳輸對(duì)象的使用
  • 解析ABP框架領(lǐng)域?qū)又械膶?shí)體類與倉(cāng)儲(chǔ)類
  • 詳解ABP框架中Session功能的使用方法
  • 詳解ABP框架中的日志管理和設(shè)置管理的基本配置
  • ABP框架的基礎(chǔ)配置及依賴注入講解
  • ASP.NET樣板項(xiàng)目ABP框架的特性總結(jié)
  • 基于ASP.NET MVC的ABP框架入門學(xué)習(xí)教程
  • ABP框架中導(dǎo)航菜單的使用及JavaScript API獲取菜單的方法

標(biāo)簽:聊城 甘肅 海西 清遠(yuǎn) 臨夏 中衛(wèi) 慶陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解》,本文關(guān)鍵詞  ABP,框架,的,體系結(jié)構(gòu),及,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    久久久九九九九| 99re热视频这里只精品| 国产欧美精品一区aⅴ影院| 不卡的看片网站| 午夜激情综合网| 久久久久久影视| 欧美日韩精品一区二区三区四区| 精品一区二区日韩| 亚洲欧美日韩精品久久久久| 日韩精品专区在线影院观看 | 日本韩国欧美一区二区三区| 美女被吸乳得到大胸91| 欧美精品三级在线观看| 成人动漫在线一区| 国内久久精品视频| 亚洲va韩国va欧美va| 亚洲视频在线一区| 国产欧美日韩中文久久| 日韩午夜电影在线观看| 久久99国产精品麻豆| 不卡一卡二卡三乱码免费网站 | 亚洲影院理伦片| 国产精品视频你懂的| 精品国产一二三区| 91精品国产一区二区三区香蕉| 91网上在线视频| 国产成人在线影院| 狠狠狠色丁香婷婷综合久久五月| 香蕉成人伊视频在线观看| 亚洲黄色小视频| 一区二区三区在线高清| 成人免费在线视频| 亚洲欧洲www| 国产精品久久久久影院老司| 久久精品视频一区二区三区| 国模无码大尺度一区二区三区| 午夜久久福利影院| 亚洲成人自拍网| 亚洲国产你懂的| 亚洲电影在线播放| 亚洲电影你懂得| 午夜精品影院在线观看| 亚洲午夜久久久久久久久久久| 在线免费观看日韩欧美| 日韩精品亚洲专区| 亚洲www啪成人一区二区麻豆 | 久久超碰97人人做人人爱| 久久av老司机精品网站导航| 老司机精品视频导航| 欧美亚洲高清一区| 亚洲18色成人| 秋霞电影一区二区| 久久www免费人成看片高清| 美脚の诱脚舐め脚责91 | 狠狠色综合播放一区二区| 奇米亚洲午夜久久精品| 久久se精品一区精品二区| 中文成人av在线| 国产精品免费人成网站| 亚洲欧美偷拍另类a∨色屁股| 中文字幕亚洲在| 亚洲免费在线观看视频| 日韩有码一区二区三区| 黄页视频在线91| 成人高清免费观看| 欧美在线观看你懂的| 亚洲男人电影天堂| 欧美国产精品一区二区| 亚洲精品自拍动漫在线| 天堂av在线一区| 国产精品一线二线三线精华| 成人app软件下载大全免费| 在线免费观看不卡av| 日韩欧美另类在线| 欧美激情综合在线| 亚洲国产日日夜夜| 日韩av不卡一区二区| 国产原创一区二区| 色综合欧美在线视频区| 日韩视频在线你懂得| 中文字幕国产一区二区| 午夜欧美2019年伦理 | 亚洲国产精品久久人人爱| 久久黄色级2电影| 色综合色综合色综合色综合色综合| 色综合久久久久综合体桃花网| 91福利精品第一导航| 欧美v亚洲v综合ⅴ国产v| 亚洲欧洲一区二区在线播放| 午夜精彩视频在线观看不卡| 欧美一级高清大全免费观看| 精品婷婷伊人一区三区三| 久久婷婷久久一区二区三区| 亚洲欧美视频在线观看视频| 久久97超碰色| 欧美天堂亚洲电影院在线播放| 精品久久久久久最新网址| 亚洲天堂久久久久久久| 免费高清在线视频一区·| 99riav一区二区三区| 欧美电视剧在线看免费| 一区二区三区色| 国产福利一区二区三区在线视频| 欧美午夜影院一区| 国产精品久久精品日日| 捆绑调教美女网站视频一区| 91黄色免费观看| 亚洲国产精品ⅴa在线观看| 国产婷婷精品av在线| 全国精品久久少妇| 在线免费观看视频一区| 国产精品理论片在线观看| 国产乱码精品一区二区三区忘忧草 | 亚洲国产视频网站| 国产在线不卡一区| 欧美肥妇free| 亚洲一区二区三区视频在线播放| 成人中文字幕合集| 精品国产乱码久久久久久闺蜜| 1024精品合集| 成人h动漫精品一区二区| 2021中文字幕一区亚洲| 欧美aaaaa成人免费观看视频| 色94色欧美sute亚洲线路一ni| 国产人成一区二区三区影院| 极品销魂美女一区二区三区| 欧美久久久影院| 亚洲高清一区二区三区| 色哟哟一区二区在线观看| 欧美国产一区二区在线观看| 韩国成人精品a∨在线观看| 国产精品系列在线播放| 精品国产成人系列| 蜜臀精品久久久久久蜜臀| 51精品视频一区二区三区| 午夜精品福利久久久| 欧美一区二区三区视频免费| 日韩专区在线视频| 欧美一区二区三区日韩视频| 奇米色777欧美一区二区| 欧美一区二区在线免费观看| 欧美色精品天天在线观看视频| 日韩精品一区二区三区老鸭窝| 久久成人免费网| 久久精品人人做人人爽97| 国产一区二区成人久久免费影院| 久久伊人蜜桃av一区二区| 国产精品1区二区.| 中文字幕一区二区三区av| 9i在线看片成人免费| 亚洲六月丁香色婷婷综合久久 | 1024亚洲合集| 欧美在线免费观看视频| 五月天激情综合网| 亚洲乱码日产精品bd| 日韩av一区二区三区| 欧美电视剧在线观看完整版| 国产成人在线网站| 欧美色倩网站大全免费| 五月天国产精品| 久久久久88色偷偷免费| 91老师国产黑色丝袜在线| 亚洲福利一区二区三区| 精品av久久707| 成人午夜伦理影院| 一区二区三区在线视频免费| 欧美蜜桃一区二区三区| 精品系列免费在线观看| 免费看精品久久片| 日韩一卡二卡三卡四卡| 处破女av一区二区| 亚洲1区2区3区4区| 国产亚洲欧美激情| 在线观看成人小视频| 久久疯狂做爰流白浆xx| 国产精品国产成人国产三级 | 成人自拍视频在线观看| 性做久久久久久久久| 国产亚洲欧美日韩在线一区| 在线观看三级视频欧美| 极品美女销魂一区二区三区 | 国产精品123| 亚洲一区二区三区激情| 国产成人啪午夜精品网站男同| 亚洲综合成人网| 精品国产露脸精彩对白| 色欧美88888久久久久久影院| 极品少妇xxxx精品少妇偷拍| 亚洲免费在线播放| 2020国产精品自拍| 日本精品裸体写真集在线观看| 午夜视频一区在线观看| 国产蜜臀97一区二区三区| 7777女厕盗摄久久久| 欧美视频一区二区三区四区| 久久成人久久鬼色| 午夜免费久久看| 亚洲摸摸操操av| 国产精品免费免费| 久久久久国色av免费看影院|