.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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...