婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > ABP框架的體系結構及模塊系統講解

ABP框架的體系結構及模塊系統講解

熱門標簽:蘇州如何辦理400電話 外呼電話機器人成本 網絡電話外呼系統上海 400電話辦理怎么樣 地圖標注軟件免費下載 西寧呼叫中心外呼系統線路商 百應電話機器人外呼系統 臨沂智能電話機器人加盟 聯通官網400電話辦理

DDD分層
為了減少復雜性和提高代碼的可重用性,采用分層架構是一種被廣泛接受的技術。
為了實現分層的體系結構,ABP遵循DDD(領域驅動設計)的原則,將分為四個層次:

  • 展現層(Presentation):提供一個用戶界面,實現用戶交互操作。
  • 應用層(Application):進行展現層與領域層之間的協調,協調業務對象來執行特定的應用程序的任務。它不包含業務邏輯。
  • 領域層(Domain):包括業務對象和業務規則,這是應用程序的核心層。
  • 基礎設施層(Infrastructure):提供通用技術來支持更高的層。例如基礎設施層的倉儲(Repository)可通過ORM來實現數據庫交互。

根據實際需要,可能會有額外添加的層。例如:

分布式服務層(Distributed Service):用于公開應用程序接口供遠程客戶端調用。比如通過ASP.NET Web API和WCF來實現。
這些都是常見的以領域為中心的分層體系結構。不同的項目在實現上可能會有細微的差別。


ABP的體系結構

一個簡單的解決方案,大致包含5個項目:

每一層可以用一個或多個程序集來實現。
1.領域層(Domain)
        領域層就是業務層,是一個項目的核心,所有業務規則都應該在領域層實現。
2.實體(Entity)
  實體代表業務領域的數據和操作,在實踐中,通過用來映射成數據庫表。
3.倉儲(Repository)
  倉儲用來操作數據庫進行數據存取。倉儲接口在領域層定義,而倉儲的實現類應該寫在基礎設施層。
4.領域服務(Domain service)
  當處理的業務規則跨越兩個(及以上)實體時,應該寫在領域服務方法里面。
5.領域事件(Domain Event)
  在領域層某些特定情況發生時可以觸發領域事件,并且在相應地方捕獲并處理它們。
6.工作單元(Unit of Work)
  工作單元是一種設計模式,用于維護一個由已經被修改(如增加、刪除和更新等)的業務對象組成的列表。它負責協調這些業務對象的持久化工作及并發問題。


應用層(Application)
應用層提供一些應用服務(Application Services)方法供展現層調用。一個應用服務方法接收一個DTO(數據傳輸對象)作為輸入參數,使用這個輸入參數執行特定的領域層操作,并根據需要可返回另一個DTO。在展現層到領域層之間,不應該接收或返回實體(Entity)對象,應該進行DTO映射。一個應用服務方法通常被認為是一個工作單元(Unit of Work)。用戶輸入參數的驗證工作也應該在應用層實現。ABP提供了一個基礎架構讓我們很容易地實現輸入參數有效性驗證。建議使用一種像AutoMapper這樣的工具來進行實體與DTO之間的映射。
 
基礎設施層(Infrastructure)
當在領域層中為定義了倉儲接口,應該在基礎設施層中實現這些接口。可以使用ORM工具,例如EntityFramework或NHibernate。ABP的基類已經提供了對這兩種ORM工具的支持。數據庫遷移也被用于這一層。
 
WEB與展現層(Web Presentation)
Web層使用ASP.NET MVC和Web API來實現。可分別用于多頁面應用程序(MPA)和單頁面應用程序(SPA)。
在SPA中,所有資源被一次加載到客戶端瀏覽器中(或者先只加載核心資源,其他資源懶加載),然后通過AJAX調用服務端WebApi接口獲取數據,再根據數據生成HTML代碼。不會整個頁面刷新。現在已經有很多SPA的JS框架,例如: AngularJs、 DurandalJs、BackboneJs、EmberJs。 ABP可以使用任何類似的前端框架,但是ABP提供了一些幫助類,讓我們更方便地使用AngularJs和DurandalJs。
在經典的多頁面應用(MPA)中,客戶端向服務器端發出請求,服務器端代碼(ASP.NET MVC控制器)從數據庫獲得數據,并且使用Razor視圖生成HTML。這些被生成后的HTML頁面被發送回客戶端顯示。每顯示一個新的頁面都會整頁刷新。
SPA和MPA涉及到完全不同的體系結構,也有不同的應用場景。一個管理后臺適合用SPA,博客就更適合用MPA,因為它更利于被搜索引擎抓取。
SignalR是一種從服務器到客戶端發送推送通知的完美工具。它能給用戶提供豐富的實時的體驗。
已經有很多客戶端的Javascript框架或庫,JQuery是其中最流行的,并且它有成千上萬免費的插件。使用Bootstrap可以讓我們更輕松地完成寫Html和CSS的工作。
ABP也實現了根據Web API接口自動創建 Javascript的代碼函數,來簡化JS對Web Api的調用。還有把服務器端的菜單、語言、設置等生成到JS端。(但是在我自己的項目中,我是把這些自動生成功能關閉的,因為必要性不是很大,而這些又會比較影響性能)。
ABP會自動處理服務器端返回的異常,并以友好的界面提示用戶。


ABP模塊系統
ABP框架提供了創建和組裝模塊的基礎,一個模塊能夠依賴于另一個模塊。在通常情況下,一個程序集就可以看成是一個模塊。在ABP框架中,一個模塊通過一個類來定義,而這個類要繼承自AbpModule。
譯者注:如果學習過Orchard的朋友,應該知道module模塊的強大了。模塊的本質就是可重用性,你可以在任意的地方去調用,而且通過實現模塊,你寫的模塊也可以給別人用。
Assembly程序集:Assembly是一個包含來程序的名稱,版本號,自我描述,文件關聯關系和文件位置等信息的一個集合。最簡單的理解就是:一個你自己寫的類庫生成的dll就可以看做是一個程序集,這個程序集可以包括很多類,類又包括很多方法等。
.net可以通過反射獲取一個程序集中的類以及方法。
下面的例子,我們開發一個可以在多個不同應用中被調用MybolgApplication模塊,代碼如下:

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

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

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

下面是具體方法的說明:

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

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

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

public class MyModule1 : AbpModule
{
 public override void Initialize() //初始化模塊
 {
 IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());//這里,進行依賴注入的注冊。
 }
 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(); //調用MyModuleMethod1的方法。
 }
 public override void Initialize()
 {
 IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
 }
}

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

您可能感興趣的文章:
  • 解析ABP框架中的數據傳輸對象與應用服務
  • ABP框架中的日志功能完全解析
  • 詳解ABP框架的參數有效性驗證和權限驗證
  • 詳解ABP框架中領域層的領域事件Domain events
  • 解析ABP框架中的事務處理和工作單元
  • 詳解ABP框架中的數據過濾器與數據傳輸對象的使用
  • 解析ABP框架領域層中的實體類與倉儲類
  • 詳解ABP框架中Session功能的使用方法
  • 詳解ABP框架中的日志管理和設置管理的基本配置
  • ABP框架的基礎配置及依賴注入講解
  • ASP.NET樣板項目ABP框架的特性總結
  • 基于ASP.NET MVC的ABP框架入門學習教程
  • ABP框架中導航菜單的使用及JavaScript API獲取菜單的方法

標簽:聊城 甘肅 海西 平涼 清遠 臨夏 中衛 慶陽

巨人網絡通訊聲明:本文標題《ABP框架的體系結構及模塊系統講解》,本文關鍵詞  ABP,框架,的,體系結構,及,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ABP框架的體系結構及模塊系統講解》相關的同類信息!
  • 本頁收集關于ABP框架的體系結構及模塊系統講解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲成人激情av| 久久久国产午夜精品 | 亚洲综合激情网| 综合久久国产九一剧情麻豆| 国产精品乱码人人做人人爱| 国产女同互慰高潮91漫画| 久久香蕉国产线看观看99| 欧美成人伊人久久综合网| 精品区一区二区| 中文字幕欧美国产| 亚洲精品国产品国语在线app| 一区二区三区四区视频精品免费 | 国产精品嫩草影院av蜜臀| 国产亚洲精品7777| 亚洲视频香蕉人妖| 午夜欧美一区二区三区在线播放| 五月天久久比比资源色| 精品一区二区三区视频在线观看 | 中文字幕一区二区三区色视频 | 成人视屏免费看| 色婷婷国产精品综合在线观看| 一本一本大道香蕉久在线精品| 一本久久a久久免费精品不卡| 欧美中文字幕一区| 久久婷婷国产综合国色天香| 国产欧美精品一区二区色综合| 伊人开心综合网| 日本怡春院一区二区| 国产一区二区三区免费在线观看| 色综合夜色一区| 欧美mv和日韩mv国产网站| 亚洲视频资源在线| 免费xxxx性欧美18vr| 成人va在线观看| 88在线观看91蜜桃国自产| 久久精品人人做人人综合| 亚洲综合一二三区| 国产一区二区精品久久| 欧美调教femdomvk| 国产精品免费人成网站| 蜜桃av一区二区| 91福利精品视频| 亚洲国产激情av| 青草av.久久免费一区| 91麻豆视频网站| 精品福利一区二区三区 | 国产美女精品一区二区三区| 91蝌蚪porny| 中文在线资源观看网站视频免费不卡 | 欧美另类久久久品| 中文字幕精品一区二区三区精品| 五月天一区二区三区| 91视频在线看| 国产人成一区二区三区影院| 男人的j进女人的j一区| 欧美在线一二三四区| 国产精品午夜在线观看| 狠狠色狠狠色综合| 精品国产区一区| 免费视频一区二区| 在线电影院国产精品| 一区二区三区不卡视频| 一本一本久久a久久精品综合麻豆| 国产女人18水真多18精品一级做 | 亚洲一区二区在线免费观看视频| 成人免费毛片a| 国产精品国产三级国产普通话三级| 狠狠色丁香婷婷综合久久片| 日韩女同互慰一区二区| 久久精品国产网站| 欧美变态口味重另类| 精品无人码麻豆乱码1区2区| 精品美女被调教视频大全网站| 免费视频一区二区| www欧美成人18+| 国产成人在线观看免费网站| 久久综合九色综合欧美亚洲| 国精产品一区一区三区mba桃花 | 久久久久高清精品| 国产成人av一区| 国产精品久久一卡二卡| 91麻豆视频网站| 亚洲人被黑人高潮完整版| 91丨九色丨尤物| 亚洲成人av电影| 精品欧美黑人一区二区三区| 国产综合色精品一区二区三区| 久久久久久久久久看片| 成人视屏免费看| 亚洲电影视频在线| 日韩欧美aaaaaa| 成人app网站| 五月综合激情网| 国产午夜亚洲精品不卡| 99在线视频精品| 午夜久久电影网| 国产农村妇女精品| 在线视频一区二区三区| 裸体歌舞表演一区二区| 国产精品久久久久一区二区三区共| 色域天天综合网| 美国精品在线观看| 亚洲欧美日韩电影| 欧美精品一区二区在线播放| www..com久久爱| 日韩黄色小视频| 亚洲人一二三区| 久久色.com| 欧美日韩一区 二区 三区 久久精品| 久久99蜜桃精品| 一区二区三区精品久久久| 日韩欧美国产高清| 91免费视频网| 国产自产高清不卡| 性感美女久久精品| 国产日韩欧美精品综合| 欧美福利视频一区| 91免费观看国产| 国产.欧美.日韩| 精品在线观看视频| 午夜日韩在线电影| 亚洲激情图片qvod| 国产精品久久久一区麻豆最新章节| 欧美一区二区三区日韩视频| 99视频一区二区| 国产剧情一区二区三区| 欧美aaaaa成人免费观看视频| 亚洲黄网站在线观看| 国产精品午夜在线| 国产日韩欧美一区二区三区综合| 日韩免费高清av| 欧美一区二区三区视频在线观看| 欧美色偷偷大香| 色噜噜久久综合| 91在线观看免费视频| 粉嫩一区二区三区性色av| 国内一区二区在线| 精油按摩中文字幕久久| 美腿丝袜亚洲色图| 男女性色大片免费观看一区二区| 亚洲高清中文字幕| 午夜精品福利久久久| 亚洲自拍偷拍九九九| 一区二区三区色| 亚洲一区二区中文在线| 亚洲午夜私人影院| 亚洲精品国久久99热| 伊人婷婷欧美激情| 亚洲va国产天堂va久久en| 亚洲一区二区在线免费观看视频| 亚洲综合清纯丝袜自拍| 亚洲高清不卡在线| 日本美女一区二区三区| 日本美女一区二区| 久久er精品视频| 丰满少妇久久久久久久 | 婷婷中文字幕综合| 日韩和欧美的一区| 九九九久久久精品| 成人国产在线观看| 日本道精品一区二区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 中文字幕一区二区三区色视频| 国产欧美精品区一区二区三区 | 欧美成人伊人久久综合网| 久久久亚洲国产美女国产盗摄| 国产精品丝袜黑色高跟| 亚洲精品中文字幕乱码三区 | 亚洲免费在线视频一区 二区| 亚洲精品高清视频在线观看| 亚洲bt欧美bt精品777| 久久精品国产免费| av欧美精品.com| 欧美福利一区二区| 欧美激情自拍偷拍| 亚洲一区二区三区影院| 久久国产精品免费| 91免费版在线| 精品国产一区二区三区av性色| 亚洲视频免费看| 久久国产人妖系列| 91久久久免费一区二区| 91精品国产手机| 亚洲丝袜另类动漫二区| 久久成人av少妇免费| 97se狠狠狠综合亚洲狠狠| 日韩欧美国产综合一区| 亚洲欧美日韩一区二区 | 久久影院午夜论| 亚洲免费观看高清完整版在线观看熊 | 一区二区在线观看视频 | 一区在线中文字幕| 日本成人在线不卡视频| 91在线一区二区| 精品电影一区二区三区| 亚洲国产精品影院| 91免费观看国产| 久久精品一区蜜桃臀影院| 日韩精品一区第一页| 色综合久久中文字幕综合网|