在應用程序設計中,分層架構是一種被普遍使用的技術,它助於下降複雜度和提升代碼的可重用性。在ABP框架中,使用了DDD(領域驅動設計)的原則來實現分層架構.html
在DDD(領域驅動設計)架構模型中,有四個基礎層。數據庫
在一個現代化的架構應用中,除了DDD模型的4個基礎層(表現層、應用層、領域層、基礎設施層)之外, 一般還有其餘的一些邏輯層和物理層。下面的架構模型圖是ABP建議使用而且已經實現的結構模型。ABP框架不只提供了基類和服務來很是容易的實現此架構模型,而且已經提供了模板程序(參見ABP框架 - 個人第一個WEB API)來讓咱們直接在此架構模型上開始開發。
緩存
遠程客戶端是應用服務的消費者,經過HTTP API的方式來調用應用服務。客戶端能夠是一個單頁應用程序(SPA),一個移動APP,也能夠是一個第三方的消費者。本地化和導航能夠在客戶端中實現。架構
ASP.NET (Core) MVC能夠被認爲是展示層。展示層能夠是物理層(經過HTTP API來調用應用服務),也能夠是一個邏輯層(直接注入並使用應用服務)。展示層通常提供本地化、導航、對象映射、緩存、配置管理、審計日誌等這些功能。也能夠處理受權、會話和異常。框架
分佈式服務層經過API(例如REST、OData、GraphQL)來爲遠程客戶端提供應用服務功能。它不包含任務業務邏輯,僅僅是接收HTTP請求,而後調用相應的應用/領域服務來完成特定功能。分佈式服務層通常包括受權、緩存、審計日誌、對象映射、異常處理和會話等。分佈式
應用層主要包含應用服務,應用服務從展現層/分佈式服務層接收輸入DTO對象,而後調用領域層的特定操做,組合編排領域對象,並根據須要返回輸出DTO給展現層/分佈式服務層。應用層一般也會包括受權、緩存、審計日誌、對象映射、會話等。設計
領域層主要用來實現業務邏輯,它包括領域實體、值對象、領域服務並執行業務邏輯。它也規約和領域事件。領域層定義了數據倉儲接口來讀取和持久化實體到數據源,可是領域層並不實現數據倉儲。日誌
領域層定義了數據倉儲接口,基礎設施層則經過Entity Framework(Core)/NHibernate與實際數據庫交互來實現數據倉儲接口。基礎設施層並無嚴格的定義,它裏面實現的功能一般是提供給其餘層使用的公共功能,好比發送郵件功能,就能夠定義在基礎設施層。htm