.NET及.NET Core系統架構

来源:http://www.cnblogs.com/linezero/archive/2017/09/13/architecture.html
-Advertisement-
Play Games

.NET 官方架構指南 Microservices and Docker Containers Web Applications with ASP.NET 官網地址:https://www.microsoft.com/net/learn/architecture 三層及多層架構 Multitier ...


.NET 官方架構指南

 

Microservices and Docker Containers

Web Applications with ASP.NET

官網地址:https://www.microsoft.com/net/learn/architecture

三層及多層架構 Multitier Architecture

ASP.NET N-Tier Architecture Schema

Visual Studio N-Tier Example

來源:https://dotnetdaily.net/featured/n-tier-architecture-asp-net

微軟官方N-Tier 介紹:https://docs.microsoft.com/zh-cn/visualstudio/data-tools/n-tier-data-applications-overview

三層架構wiki

https://en.wikipedia.org/wiki/Multitier_architecture#Three-tier_architecture

https://en.wikipedia.org/wiki/Multitier_architecture

洋蔥架構 Onion Architecture

四個洋蔥架構(Onion Architecture)的原則:

  • 應用程式是圍繞獨立對象模型構建的
  • 內層定義介面。外層實現介面
  • 耦合方向朝向中心
  • 所有應用程式的核心代碼可以與基礎架構分開編譯和運行

原文:http://jeffreypalermo.com/blog/onion-architecture-part-4-after-four-years/

洋蔥架構有時也被稱為埠和適配器(Ports and Adapters)架構,或者是六邊形(Hexagonal)架構。不過Wade認為,後者應該是洋蔥架構的一個超集。

核心(Core)層是與領域或技術無關的基礎構件塊,它包含了一些通用的構件塊,例如list、case類或Actor等等。核心層不包含任何技術層面的概念,例如REST或資料庫等等。 
領域(Domain)層是定義業務邏輯的地方,每個類的方法都是按照領域通用語言中的概念進行命名的。對領域層的控制是通過API層進行操作的,而所有的業務邏輯都歸屬於領域層。這種方式保證了應用程式的可移植性,在不丟失任何業務邏輯的情況下替換掉整個技術實現。 
API層是領域層的入口,它使用領域中的術語和對象。Wade提到:API層應該僅僅向外界暴露不可變的對象,以避免開發者通過暴露的對象獲得對底層領域的訪問,並任意修改領域行為。Wade通常會從API層開始編碼工作,每個方法就是一個骨架,並且對應一個高層次的功能性測試。隨後添加代碼邏輯以使該測試通過,以此驅動領域層的編碼實現。 
基礎架構(Infrastructure)層是最外部的一層,它包含了對接各種技術的適配器,例如資料庫、用戶界面以及外部服務。它能夠訪問所有處於內部的層次,但多數操作是通過API層進行的。但也有一種例外情況的存在 ,就是負責實現領域層中所定義的某些介面(譯註:例如各種Repository的介面)。 

洋蔥架構中的一個重要概念是依賴,外部的層能夠訪問內部的層,而內部的層則對外部的層一無所知。

http://www.infoq.com/cn/news/2014/11/ddd-onion-architecture

整潔架構 Clean Architecture

依賴規則(The Dependency Rule)

同心圓代表的是不同層級的軟體代碼。通常當你更深一步思考構造你的系統的時候,你的系統就會在更高的層級。最外層的圈代表的是機制級別的系統。最內層的代表的是策略級別的系統。

最重要的一條規則是依賴規則(The Dependency Rule)。這條規則說的是:代碼依賴只能使由外向內。換句話說,內層結構的代碼不能包含有任何外層結構的信息。尤其是一些外層結構的名稱不應該被內層結構的代碼提到,比如函數名,類名,變數名,或者其他的系統實體的名稱。

同樣的,外層的數據結構不應該被內層代碼使用,特別是那些由外部框架生成的數據結構。我們並不希望外部結構的任何東西會影響到內部結構。

實體層(Entities)

實體是用來封裝公司的業務規則的。一個實體可以是一個帶方法的對象,也可以是一些數據結構和函數。只要實體能被公司的不同業務邏輯部件使用,實體的具體表現形式是無所謂的。

或許你並不是想寫公司級的架構,而只是想寫一個簡單的應用,那麼這裡實體就是指的應用的業務邏輯對象。它們封裝了最通用的規則,並且當外部環境變化的時候,這些實體是最不需要被變化的。舉例來說,比如在增加翻頁需求或者是安全需求的時候,這些實體是最不應該被改變的。沒有任何具體的應用需要改變實體層。

用戶實例層(Use Cases)

這一層的軟體結構包含了具體的應用業務邏輯。它實現了所有的用戶實例。這些用戶的實例由流入實體的數據流和流出實體的數據流實現,這些用戶實例使得內層的實體能依靠實體內定義的業務邏輯規則來完成系統的用戶需求。

我們不希望用戶實例層的任何改變會影響到實體層。我們同樣也不希望用戶實例層會被外部的結構層,比如UI、資料庫或者任何公共的框架,的改變而影響。這層應該是獨立於這些概念的。

當然,必然發生的是應用的業務邏輯被修改會影響到用戶實例層的代碼和結構。如果用戶的需求改變了,這層的部分當然會被修改。

介面適配層(Interface Adapters)

這一層的軟體結構的目的就是進行數據的轉換,將便於用戶實例和實體層操作的數據結構變化成為最便於外部結構(比如資料庫或者Web)操作的數據結構。比如GUI的MVC結構,表現器、視圖器、控制器都是屬於這個結構的。這層很可能是通過控制器將數據結構傳給用戶實例層,並且返回數據給表現器,視圖器。

數據在這層會被轉換,將便於實體層和用戶實例層使用的數據轉化成為持久層能使用的數據,比如資料庫。這一層的代碼並不需要知道任何資料庫的信息。如果資料庫是SQL資料庫,那麼,所有的SQL語言應當在這層被限制使用,特別是在這一層中與資料庫有交互的代碼部分。

當一些外部的服務需要與用戶實例層和實體層進行交互的時候,這時候需要的數據轉換也理所當然地放在這一層了。

框架和驅動層(Frameworks and Drivers)

最外層是由框架和使用工具組成的。比如資料庫,Web框架等。通常你並不需要寫很多代碼就能達到與內層進行交互的行為。

這層表達的是所有的數據應該具體最終到達的地方。Web是數據的最終到達地,資料庫也是數據的最終到達地。我們把這些東西放在最外層,它們幾乎對整個系統的架構造不成什麼影響。

 

原文:https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html

譯文:http://www.cnblogs.com/yjf512/archive/2012/09/10/2678313.html

DDD領域驅動分層架構 Domain-Driven Design

四層架構

  1. User Interface為用戶界面層(或表示層),負責向用戶顯示信息和解釋用戶命令。這裡指的用戶可以是另一個電腦系統,不一定是使用用戶界面的人。
  2. Application為應用層,定義軟體要完成的任務,並且指揮表達領域概念的對象來解決問題。這一層所負責的工作對業務來說意義重大,也是與其它系統的應用層進行交互的必要渠道。應用層要儘量簡單,不包含業務規則或者知識,而只為下一層中的領域對象協調任務,分配工作,使它們互相協作。它沒有反映業務情況的狀態,但是卻可以具有另外一種狀態,為用戶或程式顯示某個任務的進度。
  3. Domain為領域層(或模型層),負責表達業務概念,業務狀態信息以及業務規則。儘管保存業務狀態的技術細節是由基礎設施層實現的,但是反映業務情況的狀態是由本層控制並且使用的。領域層是業務軟體的核心,領域模型位於這一層。
  4. Infrastructure層為基礎實施層,向其他層提供通用的技術能力:為應用層傳遞消息,為領域層提供持久化機制,為用戶界面層繪製屏幕組件,等等。基礎設施層還能夠通過架構框架來支持四個層次間的交互模式。

傳統的四層架構都是限定型鬆散分層架構,即Infrastructure層的任意上層都可以訪問該層(“L”型),而其它層遵守嚴格分層架構

鏈接:http://www.jianshu.com/p/a775836c7e25

軟體架構是有關軟體整體結構與組件的抽象描述,用於指導大型軟體系統各個方面的設計。並不針對單一語言,思路都是可以通用,都是為了實現高可用的應用系統。   ASP.NET Core 3.1 新書發佈ASP.NET Core項目開發實戰入門京東 噹噹 淘寶 GitHub:https://github.com/linezero 博客示例代碼GitHub:https://github.com/linezero/Blog
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 承接【Spring事務管理】,上一篇我們已經簡單接觸了關於Spring jdbc的知識,今天我們承接上一篇進行一下補充,上一篇直接將dataSource註入到了Dao層進行了實現,本篇我們通過簡單進行一下補充,將另外兩種實現為大家進行一下演示:1、在自己定義的DAO 實現類中註入一個DataSour ...
  • Coloring Trees CodeForces - 711C 題意:有n個點,每個點有一個c值,如果為0表示它沒有被染色,否則表示它被染成了c值的顏色。顏色有1到m。把第i棵樹染成顏色j所需要的代價是p[i][j]。求最小的代價,使得將每棵樹都染色,且如果將連續的一串同色的樹視為一個集合,共有k ...
  • 對於Spring相信很多做web開發的小活動一定不陌生,Spring中我們經常談到的就是IOC和AOP,但是對於Spring的事務管理,相信大家一定也很感興趣,今天我們就探討一下Spring中的事務管理。 首先談一下事務使用的場景,我們能想到的最常見場景就是銀行轉賬,A給B轉賬,第一步扣除A中的賬戶 ...
  • AJAX開發 AJAX即“Asynchronous Javascript And XML”(非同步JavaScript和XML),是指一種創建互動式網頁應用的網頁開發技術。 AJAX = 非同步 JavaScript和XML(標準通用標記語言的子集)。 AJAX 是一種用於創建快速動態網頁的技術。 通過 ...
  • 壞味道意指代碼中出現的可以被改進的地方。當你嗅到壞味道的時候,也就意味著重構的時機到了。 重構對軟體內部結構的一種調整,目的是在不改變軟體可觀察行為的前提下,提高其可理解性,降低其修改成本。 ...
  • 本期我們組的技術分享,打算跟大家講講服務治理。我在上篇文章中介紹了我們美團.點評北京總部用的OCTO框架,其實在上海點評部門用的是另一套Pigeon。這兩套框架都很重。這是和我們的業務有關的,其實服務治理這個東西都創業公司到成熟的大公司都在用,只是做到的程度不同。 先說說服務治理的邊界。本質上任何能 ...
  • 建造者模式是最後一個創建型設計模式,也是研究對象的創建。 將一個複雜對象的創建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 創建和表示是什麼意思 ? 表示就是外在,對象具體的樣子,而內部構建過程是一種組裝的概念,有點像套娃,同樣的結構,但是卻產生了不同大小的樣子。 按照慣例,先講故事。 假 ...
  • 今天要講的是以下三個概念: - 控制反轉 :IoC, Inversion of Control - 依賴註入:DI, Dependency Injection - 依賴查找:DL, Dependency Lookup, Service Locator 什麼是控制反轉 先說正常的控制流程是怎樣的: 比 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...