1. 程式人生 > >ABP(現代ASP.NET樣板開發框架)系列之3、ABP分層架構

ABP(現代ASP.NET樣板開發框架)系列之3、ABP分層架構

基於DDD的現代ASP.NET開發框架--ABP系列之3、ABP分層架構

ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。

前言

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

  • 展現層(Presentation):提供一個使用者介面,實現使用者互動操作。
  • 應用層(Application):進行展現層與領域層之間的協調,協調業務物件來執行特定的應用程式的任務。它不包含業務邏輯。
  • 領域層(Domain)
    :包括業務物件和業務規則,這是應用程式的核心層。
  • 基礎設施層(Infrastructure):提供通用技術來支援更高的層。例如基礎設施層的倉儲(Repository)可通過ORM來實現資料庫互動。

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

  • 分散式服務層(Distributed Service):用於公開應用程式介面供遠端客戶端呼叫。比如通過ASP.NET Web API和WCF來實現。

這些都是常見的以領域為中心的分層體系結構。不同的專案在實現上可能會有細微的差別。


ABP的體系結構

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


每一層可以用一個或多個程式集來實現。

領域層(Domain)

領域層就是業務層,是一個專案的核心,所有業務規則都應該在領域層實現。

實體(Entity)
  實體代表業務領域的資料和操作,在實踐中,通過用來對映成資料庫表。

倉儲(Repository
  倉儲用來操作資料庫進行資料存取。倉儲介面在領域層定義,而倉儲的實現類應該寫在基礎設施層。

領域服務(Domain service)
  當處理的業務規則跨越兩個(及以上)實體時,應該寫在領域服務方法裡面。

領域事件(Domain Event)
  在領域層某些特定情況發生時可以觸發領域事件,並且在相應地方捕獲並處理它們。

工作單元(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使用Castle Windsor為整個程式框架提供依賴注入的功能。使用Log4Net日誌記錄元件,提供給其他各層呼叫以進行日誌記錄。

希望更多國內的架構師能關注到ABP這個專案,也許這其中有能幫助到您的地方,也許有您的參與,這個專案可以發展得更好。

歡迎加QQ群:

ABP架構設計交流群:134710707 ABP架構設計交流群      ABP架構設計交流2群: 579765441ABP架構設計交流群2

相關推薦

ABP(現代ASP.NET樣板開發框架)系列3ABP分層架構

基於DDD的現代ASP.NET開發框架--ABP系列之3、ABP分層架構 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 前言 為了減少複雜性和提高程式碼的可重用性,採用分層架構是一種被廣泛接受的技術。為了實現分層的

ABP(現代ASP.NET樣板開發框架)系列10ABP領域層——實體

基於DDD的現代ASP.NET開發框架--ABP系列之10、ABP領域層——實體 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由深圳-Carl提供翻譯 實體是DDD(領域驅動設計)的核心概念之一。Eric Eva

ABP(現代ASP.NET樣板開發框架)系列4ABP模組系統

基於DDD的現代ASP.NET開發框架--ABP系列之4、ABP模組系統 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由東莞-天道提供翻譯  ABP模組系統簡介 ABP框架提供了建立和組裝模組的基礎,一個模組

ABP(現代ASP.NET樣板開發框架)系列6ABP依賴注入

基於DDD的現代ASP.NET開發框架--ABP系列之6、ABP依賴注入 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由 上海-半冷 提供翻譯 什麼是依賴注入 如果你已經知道依賴注入的概念,建構函式和屬性注入

ABP(現代ASP.NET樣板開發框架)系列9ABP設定管理

基於DDD的現代ASP.NET開發框架--ABP系列之9、ABP設定管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由山東-李偉提供翻譯 介紹 每個應用程式需要儲存一些設定並在應用程式的某個地方使用這些設定。

ABP(現代ASP.NET樣板開發框架)系列2ABP入門教程

基於DDD的現代ASP.NET開發框架--ABP系列之2、ABP入門教程 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程式的新起點,它旨在成為一個通用的

ABP(現代ASP.NET樣板開發框架)系列17ABP應用層——引數有效性驗證

基於DDD的現代ASP.NET開發框架--ABP系列之17、ABP應用層——引數有效性驗證 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 應用程式的輸入資料首先應該被檢驗是否有效。輸入的資料能被使用者或其他應用程式提

ABP(現代ASP.NET樣板開發框架)系列16ABP應用層——資料傳輸物件(DTOs)

基於DDD的現代ASP.NET開發框架--ABP系列之16、ABP應用層——資料傳輸物件(DTOs) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 資料傳輸物件(Data Transfer Objects)用於應用層

ABP(現代ASP.NET樣板開發框架)系列13ABP領域層——資料過濾器(Data filters)

基於DDD的現代ASP.NET開發框架--ABP系列之13、ABP領域層——資料過濾器(Data filters) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 介紹 在資料庫開發中,我們一般會運用軟刪除(soft

ABP(現代ASP.NET樣板開發框架)系列21ABP展現層——Javascript函式庫

基於DDD的現代ASP.NET開發框架--ABP系列之21、ABP展現層——Javascript函式庫 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate的js庫提供了一些讓java

ABP(現代ASP.NET樣板開發框架)系列14ABP領域層——領域事件(Domain events)

基於DDD的現代ASP.NET開發框架--ABP系列之14、ABP領域層——領域事件(Domain events) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 在C#中,一個類可以定義其專屬的事件並且其它類可以註冊該事

ABP(現代ASP.NET樣板開發框架)系列5ABP啟動配置

基於DDD的現代ASP.NET開發框架--ABP系列之5、ABP啟動配置 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由 東莞-天道 提供翻譯 譯者注:在看這一節的內容之前,建議大家先下載module-ze

ABP(現代ASP.NET樣板開發框架)系列19ABP應用層——審計日誌

基於DDD的現代ASP.NET開發框架--ABP系列之19、ABP應用層——審計日誌 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 維基百科定義:審計跟蹤(也稱為稽核日誌)是一個安全相關的時間順序記錄,記錄這些記錄的

ABP(現代ASP.NET樣板開發框架)系列15ABP應用層——應用服務(Application services)

基於DDD的現代ASP.NET開發框架--ABP系列之15、ABP應用層——應用服務(Application services) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由東莞-天道提供翻譯 應用服務用於將領

ABP(現代ASP.NET樣板開發框架)系列23ABP展現層——異常處理

基於DDD的現代ASP.NET開發框架--ABP系列之23、ABP展現層——異常處理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 在 web 應用程式中,異常通常是在 MVC Controller actions

ABP(現代ASP.NET樣板開發框架)系列8ABP日誌管理

基於DDD的現代ASP.NET開發框架--ABP系列之8、ABP日誌管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由東莞-天道提供翻譯 Server side(伺服器端) ASP.NET Boilerpla

ABP(現代ASP.NET樣板開發框架)系列1ABP總體介紹

基於DDD的現代ASP.NET開發框架--ABP系列之1、ABP總體介紹 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程式的新起點,它旨在成為一個通用的

ABP(現代ASP.NET樣板開發框架)系列12ABP領域層——工作單元(Unit Of work)

基於DDD的現代ASP.NET開發框架--ABP系列之12、ABP領域層——工作單元(Unit Of work) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 通用連線和事務管理方法 連線和事務管理是使用資料庫的應用程

ABP(現代ASP.NET樣板開發框架)系列22ABP展現層——導航欄設定

基於DDD的現代ASP.NET開發框架--ABP系列之22、ABP展現層——導航欄設定 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 每一個WEB應用程式都有導航選單,Abp也為使用者提供了通用的建立和顯示選單方式。

ABP(現代ASP.NET樣板開發框架)系列7ABP Session管理

基於DDD的現代ASP.NET開發框架--ABP系列之7、ABP Session管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 簡介 如果一個應用程式需要登入,則它必須知道當前使用者執行了什麼操作。因此ASP.