DDD/CQRS模式,微服務,容器

DDD/CQRS模式,微服務,容器html

https://docs.microsoft.com/zh-cn/previous-versions/msp-n-p/ee658109(v=pandp.10)前端

Web架構分層指南

一.概述

  本章Web架構分層指南,參考了「Microsoft應用程序體系結構指南」(該書是在2009年出版的,當時出版是爲了幫助開發人員和架構師更快速,更低風險地使用Microsoft平臺和.NET Framework設計和構建有效,高質量的應用程序)。雖然已過去十年了,技術架構已更新(如流行的DDD/CQRS模式,微服務,容器),但web分層思想仍是同樣可取,下面是一個「傳統N分層設計」架構圖,該架構在2010年左右是最流行的,包括了表現層presentation,服務層services,業務層business,數據訪問層data,橫切關注點cross,以下所示:ios

  

  對比傳統多層或三層.net web架構,下圖是當前流行的.net web微服務架構,在web程序分層之上還包含了容器,web api網關,各服務對應的數據存儲(sqlserver,redis,mongoDB),web程序有web api並結合應用了DDD\CQRS分層模式,以及系統各類中間件。git

  

  下圖是一個訂單微服務站點,包含了簡化的cqrs分層,藍色長方格是表示cqrs分層的職責,包括了查詢 Queries viewModels和命令Command Domain-Model以及上層的應用服務層Application,以下所示github

 

  1.1 邏輯分層設計架構類型web

    (1) 最傳統的分層是經典三層設計,包括表現層,業務層,數據層.redis

    (2) 基於服務的解決方案SOA,公開應用程序業務功能的服務層,服務層在業務層之上。sql

    (3) 基於領域驅動設計的DDD\CQRS分層模式數據庫

    (4) 微服務架構。編程

     這4種web分層架構是不斷的演化改變 ,每一種分層架構並非獨立的思想,它包含了演化以前的架構分層思想。從之前三層架構到如今的微服務架構,是適應每一個時代互聯網業務實現的需求。

功能

SOA

微服務

組件大小

大塊業務邏輯

單獨任務或小塊業務邏輯

耦合

一般鬆耦合

老是鬆耦合

公司架構

任何類型

小型、專一於功能交叉團隊

管理

着重中央管理

着重分散管理

目標

確保應用可以交互操做

執行新功能、快速拓展開發團隊

 

二.Web分層設計步驟

  1.分層策略
    (1)分層粒度是肯定分層策略的關鍵第一步.
    (2)在邏輯分層中, 多層是在同一進程中運行,這能夠利用更高性能的通訊機制。例如經過組件接口直接調用。必須當心保持層之間的封裝和鬆散耦合。
    (3)在物理分層中,肯定合適的通訊機制,該機制考慮到通訊延遲並保持之間的鬆散耦合。
    (4)多層中,考慮它們之間如何相互影響,將確保性能和靈活性之間的良好平衡。

 

  2.肯定須要層
    最經常使用的方法是將表現層,服務層,業務層和數據訪問層功能分離到單獨的層中。某些應用程序還引入了各類組件像緩存、日誌、消息隊列等。

 

  3.決定如何分發各層和組件
    對於web體系架構,通常都是在一個物理層,只有在必要時,才應在不一樣的物理層上分佈層和組件。這是實現分佈式部署的常見緣由包括安全策略,物理約束,共享業務邏輯和可伸縮性。

 

  4.肯定是否須要摺疊層
    通常規則是您應始終將功能分組到層中。在某些狀況下,一個層能夠充當代理或傳遞層,提供封裝和鬆散耦合,而不提供大量功能。可是,經過分離該功能,您能夠稍後對其進行擴展,而對設計中的其餘層幾乎沒有影響,如:應用服務層。

 

  5.肯定層之間引用的規則
    在分層策略時,您必須定義層如何相互交互的規則(交互是指:各層引用的關係)。指定交互規則的主要緣由是最小化依賴性並消除循環引用。所以應該遵循如下方法之一:
    (1)自上而下的交互
      較高級別的層能夠與下面的層交互,可是較低級別的層不該該與上面的層交互。此規則將幫助您避免層之間的循環依賴關係,以及要下降層之間的依賴性。
    (2)嚴格的互動
      每一個層必須僅與下面的層進行交互。此規則將強制嚴格分離關注點,其中每一個層僅知道下面的層。此規則的好處是對層界面的修改只會影響上面的層。若是您正在設計一個將隨着時間的推移進行修改以引入新功能而且您但願最大限度地減小這些更改的影響的應用程序,或者您正在設計可能分佈在不一樣物理層上的應用程序,請考慮使用此方法。
    (3)鬆散的互動
      較高級別的層能夠繞過層直接與較低級別的層交互。這能夠提升性能,但也會增長依賴性。換句話說,對較低級別層的修改能夠影響上面的多個層。

    下圖是一個示例:該web架構示例是使用了 cqrs 模式,涉及到了事件源es, 事件源實現本因該分離到命令域和查詢域, 而項目中應用服務層直接引用了底層數據訪問層Dapper(繞過了領域層),  這樣底層Dapper接口方法的修改或換成EF將影響頂層應用服務層,這屬於第三種"鬆散的互動"。 應該推薦使用第一種自上而下的交互。

 

  6.肯定跨領域問題
    定義層後,必須標識跨越層的功能。此功能一般被描述爲橫切關注點,包括日誌記錄,緩存,驗證,身份驗證和異常管理。肯定應用程序中的每一個橫切關注點很是重要,並設計單獨的組件以儘量地管理這些問題。此方法可幫助您實現更好的可重用性和可維護性。
    以下圖所示:NLog與Redis是具體實現組件,實現了Common層中的日誌和緩存接口,Common層就是橫切組件,是跨層可重用的。像Ioc也是橫切組件。 下圖層的名稱沒有標識跨越層的功能,若是是GFNetCore.Infra.CrossCutting.IoC 這樣命名會更好。

 

  7.定義層之間的接口
    爲層定義接口時,主要目標是強制層之間的鬆散耦合。這意味着層不該暴露另外一層可能依賴的內部細節。相反,層的接口應設計爲經過提供隱藏層內組件細節的公共接口來最小化依賴性。這種隱藏稱爲抽象,有許多不一樣的方法來實現它。如下設計方法可用於定義層的接口:

    (1)抽象接口
      經過定義抽象基類或接口類來實現,該類充當具體類的類型定義。該類型定義了一個公共接口,該層的全部使用者都使用該接口與該層進行交互。這是一種面向接口編程,例如:表現層調用應用服務層的接口。表現層在CustomerController控制器中以下所示(經過依賴注入後,構造方法來實例):

複製代碼
    //表現層調用應用服務層ApplicationService
        private readonly ICustomerAppService _customerAppService;

        public CustomerController(ICustomerAppService customerAppService, 
                                  INotificationHandler<DomainNotification> notifications) : base(notifications)
        {
            _customerAppService = customerAppService;
        }
複製代碼

      但在項目中,爲了簡化開發量,表現層調用應用服務層的實現類(違反了面向接口編程)。表現層在CustomerController控制器中以下所示:

複製代碼
//調用應用服務層ApplicationService
        private readonly CustomerAppService _customerAppService = null;

        //日誌對象
        public readonly ILoggerEX _logger;

        public CustomerController(INotificationHandler<DomainNotification> notifications,
                                  ILoggerEX logger,
                                  CustomerAppService customerAppService)
            : base(notifications)
        {
            _customerAppService = customerAppService;
            _logger = logger;
        }
複製代碼

    (2)依賴倒置

      這是一種編程風格,是面向接口編程的實現,依賴倒置的應用如:DDD\CQRS, 層依賴於層接口,而不是層依賴於另外一個層的實現。依賴注入模式是依賴性反轉的常見實現。依賴性反轉方法提供了靈活性,能夠幫助實現可插入設計,由於依賴性是經過配置而不是代碼組成的。它還能夠最大化可測試性,由於您能夠輕鬆地將具體測試類注入到設計的不一樣層中。

      依賴性是經過配置的,以下代碼所示,由CommandRepository類來實現ICommandRepository接口:

services.AddScoped<ICommandRepository<CommandModels.Customer>, CommandRepository<CommandModels.Customer>>();
        services.AddScoped<IQueryRepository<QueryModels.Customer>, QueryRepository<QueryModels.Customer>>();

 

    (3) 基於消息

      可使用基於消息的通訊來實現接口並提供層之間的交互,.net技術如:wcf, web services, msmq它們支持跨物理和進程邊界的交互(以xml的soap格式傳輸),但這是對於09年流行的web架構。如今基於消息多數用web api技術,是面向微服務開發(以json的rest api)。

asp.net core系列篇

asp.net core系列 73 Exceptionless+Nlog以及Apollo介紹
摘要:一. 介紹 在一上篇中介紹了Exceptionless的基本使用,這篇主要講Exceptionless結合Nlog的實現雙重日誌記錄,包括Exceptionles的UI可視化日誌以及Nlog的txt文件日誌。再是從Apollo配置中心讀取配置文件,當系統越龐大越多時,須要配置的參數也愈來愈多,能夠通  閱讀全文

posted @ 2019-09-24 19:57 花陰偷移 閱讀 (344) | 評論 (0) 編輯

asp.net core系列 72 Exceptionless使用介紹
摘要:一.Exceptionless介紹 Exceptionless專一於.net平臺提供實時錯誤和日誌報告。主要包括:錯誤通知、智能分組異常、詳細錯誤報告堆棧跟蹤、支持離線、UI查看重要錯誤和肯定優先級、儀表板上的統計信息和趨勢、對異常標記爲已修復,監視迴歸、將事件標記爲關鍵等。 1.1 服務端託管 對  閱讀全文

posted @ 2019-09-07 16:46 花陰偷移 閱讀 (478) | 評論 (0) 編輯

asp.net core系列 71 Web架構分層指南
摘要:一.概述 本章Web架構分層指南,參考了「Microsoft應用程序體系結構指南」(該書是在2009年出版的,當時出版是爲了幫助開發人員和架構師更快速,更低風險地使用Microsoft平臺和.NET Framework設計和構建有效,高質量的應用程序)。雖然已過去十年了,技術架構已更新(如流行的DD  閱讀全文

posted @ 2019-08-23 09:32 花陰偷移 閱讀 (1292) | 評論 (6) 編輯

asp.net core系列 70 即時通迅-WebSocket+Redis發佈訂閱
摘要:一.概述 在asp.net core 中能夠用WebSocket 或asp.net core SignalR來開發即時通迅。在項目中因爲開發先後端分離,對於SignalR前端技術人員不想依賴juqery和SignalR.js包,後端肯定使用WebSocket 來實現。對於asp.net core有自  閱讀全文

posted @ 2019-08-09 09:33 花陰偷移 閱讀 (1175) | 評論 (2) 編輯

asp.net core系列 69 Amazon S3 資源文件上傳示例
摘要:一. 上傳示例 Amazon Simple Storage Service 是互聯網存儲解決方案。該服務旨在下降開發人員進行網絡規模級計算的難度。 Amazon S3 提供了一個簡單 Web 服務接口,可用於隨時在 Web 上的任何位置存儲和檢索任何數量的數據。此服務讓全部開發人員都能訪問同一個具有  閱讀全文

posted @ 2019-08-08 20:04 花陰偷移 閱讀 (346) | 評論 (0) 編輯

asp.net core系列 68 Filter管道過濾器
摘要:一.概述 本篇詳細瞭解一下asp.net core filters,filter叫"篩選器"也叫"過濾器",是請求處理管道中的特定階段以前或以後運行代碼。filter用於處理橫切關注點。 橫切關注點的示例包括:錯誤處理、緩存、配置、受權和日誌記錄。 filter能夠避免重複代碼,經過Attribut  閱讀全文

posted @ 2019-07-16 09:37 花陰偷移 閱讀 (608) | 評論 (5) 編輯

asp.net core系列 67 Web壓力測試工具WCAT
摘要:一.介紹 最近搭建了一套CQRS框架,須要在投入開發前,進行必要的壓力測試。Web Capacity Analysis Tool (Wcat)是一種輕量級HTTP負載生成工具,主要用於衡量受控環境中Web服務器的性能。WCAT能夠模擬數千個併發用戶向單個網站或多個網站發出請求。WCAT引擎使用一個簡  閱讀全文

posted @ 2019-07-11 12:34 花陰偷移 閱讀 (660) | 評論 (3) 編輯

asp.net core系列 66 Dapper介紹--Micro-ORM
摘要:一.概述 目前對於.net的數據訪問ORM工具不少,EF和EF Core是一個重量級的框架。最近在搭建新的項目架構,來學習一下輕量級的數據訪問ORM工具Dapper。Dapper支持SQL Server,MySQL,Sqlite,SqlCE,Firebird等的高性能Micro-ORM(微ORM框架  閱讀全文

posted @ 2019-06-29 14:27 花陰偷移 閱讀 (928) | 評論 (0) 編輯

asp.net core系列 65 正反案例介紹SOLID原則
摘要:一.概述 SOLID五大原則使咱們可以管理解決大多數軟件設計問題。由Robert C. Martin在20世紀90年代編寫了這些原則。這些原則爲咱們提供了從緊耦合的代碼和少許封裝轉變爲適當鬆耦合和封裝業務實際需求的結果方法。使用這些原則,咱們能夠構建一個具備整潔,可讀且易於維護的代碼應用程序。 SO  閱讀全文

posted @ 2019-05-24 09:43 花陰偷移 閱讀 (519) | 評論 (1) 編輯

asp.net core系列 64 結合eShopOnWeb全面認識領域模型架構
摘要:一.項目分析 在上篇中介紹了什麼是"乾淨架構",DDD符合了這種乾淨架構的特色,重點描述了DDD架構遵循的依賴倒置原則,使軟件達到了低藕合。eShopOnWeb項目是學習DDD領域模型架構的一個很好案例,本篇繼續分析該項目各層的職責功能,主要掌握ApplicationCore領域層內部的術語、成員職  閱讀全文

posted @ 2019-05-16 11:12 花陰偷移 閱讀 (1011) | 評論 (5) 編輯

asp.net core系列 63 領域模型架構 eShopOnWeb項目分析 上
摘要:一.概述 本篇繼續探討web應用架構,講基於DDD風格下最初的領域模型架構,不一樣於DDD風格下CQRS架構,兩者架構主要區別是領域層的變化。 架構的演變是從領域模型到CQRS, 一開始DDD是用領域模型的分層架構,用單一的領域模型處理業務邏輯的全部方法,特別是命令和查詢,這可能致使複雜性直線上升,C  閱讀全文

posted @ 2019-05-13 13:45 花陰偷移 閱讀 (1097) | 評論 (1) 編輯

asp.net core系列 62 CQRS架構下Equinox開源項目分析
摘要:一.DDD分層架構介紹 本篇分析CQRS架構下的Equinox開源項目。該項目在github上star佔有2.4k。便決定分析Equinox項目來學習下CQRS架構。再講CQRS架構時,先簡述下DDD風格,在DDD分層架構中,通常包含表現層、應用程序層(應用服務層)、領域層(領域服務層)、基礎設施層  閱讀全文

posted @ 2019-05-07 11:09 花陰偷移 閱讀 (2196) | 評論 (23) 編輯

asp.net core系列 61 Ocelot 構建服務發現簡單示例
摘要:一.概述 Ocelot容許指定服務發現提供程序,如Consul或Eureka。 這二箇中間件是用來實現:服務治理或秒服務發現,服務發現查找Ocelot正在轉發請求的下游服務的主機和端口。目前Ocelot僅在GlobalConfiguration部分支持配置服務發現功能,這意味着相同的服務發現提供程序  閱讀全文

posted @ 2019-04-28 16:31 花陰偷移 閱讀 (566) | 評論 (2) 編輯

asp.net core系列 60 Ocelot 構建服務認證示例
摘要:一.概述 在Ocelot中,爲了保護下游api資源,用戶訪問時須要進行認證鑑權,這須要在Ocelot 網關中添加認證服務。添加認證後,ReRoutes路由會進行身份驗證,並使用Ocelot的基於聲明的功能。在Startup.cs中註冊認證服務,爲每一個註冊提供一個方案 (authenticationP  閱讀全文

posted @ 2019-04-25 15:06 花陰偷移 閱讀 (529) | 評論 (0) 編輯

asp.net core系列 59 Ocelot 構建基礎項目示例
摘要:一.入門概述 從這篇開始探討Ocelot,Ocelot是一個.NET API網關,僅適用於.NET Core,用於.NET面向微服務/服務的架構中。當客戶端(web站點、ios、 app 等)訪問web api時,須要先統一入口點進入Ocelot網關(Ocelot能夠作不少事情例如路由,身份驗證,服  閱讀全文

posted @ 2019-04-23 14:55 花陰偷移 閱讀 (738) | 評論 (5) 編輯

asp.net core系列 58 IS4 基於瀏覽器的JavaScript客戶端應用程序
摘要:一. 概述 本篇探討使用"基於瀏覽器的JavaScript客戶端應用程序"。與上篇實現功能同樣,只不過這篇使用JavaScript做爲客戶端程序,而非core mvc的後臺代碼HttpClient實現。 功能同樣:用戶首先要登陸IdentityServer站點,再使用IdentityServer發出  閱讀全文

posted @ 2019-04-19 14:17 花陰偷移 閱讀 (527) | 評論 (3) 編輯

asp.net core系列 57 IS4 使用混合流(OIDC+OAuth2.0)添加API訪問
摘要:一.概述 在上篇中,探討了交互式用戶身份驗證,使用的是OIDC協議。 在以前篇中對API訪問使用的是OAuth2.0協議。這篇把這兩個部分放在一塊兒,OpenID Connect和OAuth 2.0組合的優勢在於:可使用單個協議和令牌服務,進行單次交換來實現這二者。 上篇中使用了OpenID Con  閱讀全文

posted @ 2019-04-18 14:49 花陰偷移 閱讀 (495) | 評論 (0) 編輯

asp.net core系列 56 IS4使用OpenID Connect添加用戶認證
摘要:一.概述 在前二篇中講到了客戶端受權的二種方式: GrantTypes.ClientCredentials憑據受權和GrantTypes.ResourceOwnerPassword密碼受權,都是OAuth2.0協議。本篇使用OpenID Connect添加用戶認證,客戶端受權是GrantTypes.  閱讀全文

posted @ 2019-04-17 14:53 花陰偷移 閱讀 (453) | 評論 (0) 編輯

asp.net core系列 55 IS4使用Identity密碼保護API
摘要:一.概述 OAuth 2.0資源(web api)全部者密碼受權,容許客戶端(Client項目)向令牌服務(IdentityServer項目)發送用戶名和密碼,並獲取表明該用戶的訪問令牌。在官方文檔中講到:規範一般建議不要使用「資源全部者密碼受權」。當用戶進行身份驗證並請求訪問令牌時,使用一個交互式  閱讀全文

posted @ 2019-04-15 10:25 花陰偷移 閱讀 (510) | 評論 (3) 編輯

asp.net core系列 54 IS4用客戶端憑據保護API
摘要:一. 概述 本篇開始進入IS4實戰學習,從第一個示例開始,該示例是 「使用客戶端憑據保護API」,這是使用IdentityServer保護api的最基本場景。該示例涉及到三個項目包括:IdentityServer項目、API項目、Client項目,都有本身的宿主,爲了方便開發,放在了一個解決方案下(  閱讀全文

posted @ 2019-04-12 09:22 花陰偷移 閱讀 (636) | 評論 (5) 編輯

asp.net core系列 53 IdentityServer4 (IS4)介紹
摘要:一.概述 在物理層之間相互通訊必須保護資源,須要實現身份驗證和受權,一般針對同一個用戶存儲。對於資源安全設計包括二個部分,一個是認證,一個是API訪問。 1 認證 認證是指:應用程序須要知道當前用戶的身份時,須要進行身份驗證,肯定用戶是否有效。最多見的身份驗證協議是SAML2p,WS-Federat  閱讀全文

posted @ 2019-04-11 09:05 花陰偷移 閱讀 (722) | 評論 (1) 編輯

asp.net core系列 52 Identity 其它關注點
摘要:一.登陸分析 在使用identity身份驗證登陸時,在login中調用的方法是: 跟蹤查看源碼,源碼下載https://github.com/aspnet/AspNetCore/releases 這裏有core源碼的不一樣版本,在vs 2017下只能加載2.2及如下的版本。 下面是登陸的大概步驟: (  閱讀全文

posted @ 2019-04-10 09:58 花陰偷移 閱讀 (252) | 評論 (0) 編輯

asp.net core系列 51 Identity 受權(下)
摘要:1.6 基於資源的受權 前面二篇中,熟悉了五種受權方式(對於上篇講的策略受權,還有IAuthorizationPolicyProvider的自定義受權策略提供程序沒有講,後面再補充)。本篇講的受權方式不是一種全新的受權方式,而是受權應用場景的靈活控制。 基於資源的受權是控制在 razor pages  閱讀全文

posted @ 2019-04-09 12:03 花陰偷移 閱讀 (562) | 評論 (5) 編輯

asp.net core系列 50 Identity 受權(中)
摘要:1.5 基於策略的受權 在上篇中,已經講到了受權訪問(authorization)的四種方式。其中Razor Pages受權約定和簡單受權二種方式更像是身份認證(authentication) ,由於只要是合法用戶登陸就能訪問資源。 而角色受權和聲明受權二種方式是真正的受權訪問(authorizat  閱讀全文

posted @ 2019-04-08 10:42 花陰偷移 閱讀 (719) | 評論 (1) 編輯

asp.net core系列 49 Identity 受權(上)
摘要:一.概述 受權是指用戶可以訪問資源的權限,如頁面數據的查看、編輯、新增、刪除、導出、下載等權限。ASP.NET Core 受權提供了多種且靈活的方式,包括:Razor pages受權約定、簡單受權、Role角色受權、Claim聲明受權、Policy策略受權、資源受權、視圖受權。 1.1 Razor  閱讀全文

posted @ 2019-04-03 11:44 花陰偷移 閱讀 (732) | 評論 (1) 編輯

asp.net core系列 48 Identity 身份模型自定義
摘要:一.概述 ASP.NET Core Identity提供了一個框架,用於管理和存儲在 ASP.NET Core 應用中的用戶賬戶。 Identity添加到項目時單個用戶賬戶選擇做爲身份驗證機制。 默認狀況下,Identity可使用的 Entity Framework (EF) Core 數據模型。  閱讀全文

posted @ 2019-03-25 15:51 花陰偷移 閱讀 (893) | 評論 (1) 編輯

asp.net core系列 47 Identity 自定義用戶數據
摘要:一.概述 接着上篇的WebAppIdentityDemo項目,將自定義用戶數據添加到Identity DB,自定義擴展的用戶數據類應繼承IdentityUser類, 文件名爲Areas / Identity / Data / {項目名稱}User.cs。自定義的用戶數據模型屬性須要使用[Person  閱讀全文

posted @ 2019-03-22 16:24 花陰偷移 閱讀 (881) | 評論 (0) 編輯

asp.net core系列 46 Identity介紹
摘要:一. Identity 介紹 ASP.NET Core Identity是一個會員系統,可爲ASP.NET Core應用程序添加登陸功能。可使用SQL Server數據庫配置身份以存儲用戶名,密碼和配置文件數據。或者,可使用另外一個持久性存儲,例如,Azure表存儲。下面學習如何使用Identit  閱讀全文

posted @ 2019-03-21 17:00 花陰偷移 閱讀 (1075) | 評論 (0) 編輯

asp.net core系列 45 Web應用 模型綁定和驗證
摘要:一. 模型綁定 ASP.NET Core MVC 中的模型綁定,是將 HTTP 請求中的數據映射到action方法參數。 這些參數多是簡單類型的參數,如字符串、整數或浮點數,也多是複雜類型的參數。 當 MVC 收到 HTTP 請求時,它會將此請求路由定位到控制器的指定action方法。默認路由模  閱讀全文

posted @ 2019-03-20 10:43 花陰偷移 閱讀 (542) | 評論 (0) 編輯

asp.net core系列 44 Web應用 佈局
摘要:一.概述 MVC的視圖與Razor頁面常常共享視覺和程序元素,經過使用佈局來完成,佈局還可減小重複代碼。本章演示瞭如下內容的操做方法:(1)使用通用佈局,(2)自定義佈局,(3) 共享指令,(4)在呈現Razor頁面或MVC視圖以前運行通用代碼。 大多數 Web 應用都有一個通用佈局,可在頁面間切換  閱讀全文

posted @ 2019-03-19 09:05 花陰偷移 閱讀 (667) | 評論 (0) 編輯

asp.net core系列 43 Web應用 Session分佈式存儲(in memory與Redis)
摘要:一.概述 HTTP 是無狀態的協議。 默認狀況下,HTTP 請求是不保留用戶值或應用狀態的獨立消息。 本文介紹了幾種保留請求間用戶數據和應用狀態的方法。下面以表格形式列出這些存儲方式,本篇專講Session會話狀態,計劃下篇再講應用狀態。 存儲方法 存儲機制 依賴關係注入 服務器端應用代碼 1.1  閱讀全文

posted @ 2019-03-18 09:43 花陰偷移 閱讀 (741) | 評論 (3) 編輯

asp.net core系列 42 Web 應用 分部視圖
摘要:一.分部視圖 對於MVC 視圖和 Razor Pages 頁面,都有分部視圖功能。一般將 MVC 視圖和 Razor Pages 頁面統稱爲「標記文件」,下面會常提到該名詞。使用分部視圖的優點包括:(1) 將大型標記文件分解爲更小的組件。(2) 減小跨標記文件中,常見標記內容的重複。 建議:(1)不  閱讀全文

posted @ 2019-03-14 10:35 花陰偷移 閱讀 (520) | 評論 (1) 編輯

asp.net core系列 41 Web 應用 MVC視圖
摘要:一.MVC視圖 在Web開發的MVC和Razor中,都有使用視圖,在Razor中稱爲"頁"。.cshtml視圖是嵌入了Razor標記的HTML模板。 Razor 標記使用C#代碼,用於與HTML 標記交互以生成發送給客戶端的網頁。在MVC目錄結構中,Views / [ControllerName]  閱讀全文

posted @ 2019-03-13 11:56 花陰偷移 閱讀 (467) | 評論 (0) 編輯

asp.net core系列 40 Web 應用MVC 介紹與詳細示例
摘要:一. MVC介紹 MVC架構模式有助於實現關注點分離。視圖和控制器均依賴於模型。 可是,模型既不依賴於視圖,也不依賴於控制器。 這是分離的一個關鍵優點。 這種分離容許模型獨立於可視化展現進行構建和測試。ASP.NET Core MVC 包括如下功能: 路由、模型綁定、模型驗證、依賴關係注入、篩選器、  閱讀全文

posted @ 2019-03-11 14:56 花陰偷移 閱讀 (771) | 評論 (0) 編輯

asp.net core系列 39 Web 應用Razor 介紹與詳細示例
摘要:一. Razor介紹 在使用ASP.NET Core Web開發時, ASP.NET Core MVC 提供了一個新特性Razor。 這樣開發Web包括了MVC框架和Razor框架。對於Razor來講它是一個新特性,在官方介紹ASP.NET Core的優勢中提到「Razor Pages可使基於頁面  閱讀全文

posted @ 2019-03-08 10:17 花陰偷移 閱讀 (379) | 評論 (0) 編輯

asp.net core系列 38 WebAPI 返回類型與響應格式--必備
摘要:一.返回類型 ASP.NET Core 提供如下 Web API Action方法返回類型選項,以及說明每種返回類型的最佳適用狀況: (1) 固定類型 (2) IActionResult (3) ActionResult<T> 1.1 固定類型 最簡單的操做是返回基元或複雜數據類型(如 string  閱讀全文

posted @ 2019-03-06 11:59 花陰偷移 閱讀 (1232) | 評論 (0) 編輯

asp.net core系列 37 WebAPI 使用OpenAPI (swagger)中間件
摘要:一.概述 在使用Web API時,對於開發人員來講,瞭解其各類方法多是一項挑戰。在ASP.NET Core上,Web api 輔助工具介紹二箇中間件,包括:Swashbuckle和NSwag .NET。本篇先講Swashbuckle。兩者都使用Swagger規範,Swagger也稱爲OpenAPI  閱讀全文

posted @ 2019-03-05 11:24 花陰偷移 閱讀 (849) | 評論 (0) 編輯

asp.net core系列 36 WebAPI 搭建詳細示例
摘要:一.概述 HTTP不只僅用於提供網頁。HTTP也是構建公開服務和數據的API強大平臺。HTTP簡單靈活且無處不在。幾乎任何你能想到的平臺都有一個HTTP庫,所以HTTP服務能夠覆蓋普遍的客戶端,包括瀏覽器,移動設備和傳統的桌面應用程序。 ASP.NET Web API 是一個框架,基於.NET Fr  閱讀全文

posted @ 2019-03-04 11:47 花陰偷移 閱讀 (1695) | 評論 (0) 編輯

asp.net core系列 35 EF保存數據(2) -- EF系列結束
摘要:一.事務 (1) 事務接着上篇繼續講完。若是使用了多種數據訪問技術,來訪問關係型數據庫,則可能但願在這些不一樣技術所執行的操做之間共享事務。下面示例顯示瞭如何在同一事務中執行 ADO.NET SqlClient 操做和 Entity Framework Core 操做。 (2) 使用 System.T  閱讀全文

posted @ 2019-03-01 11:54 花陰偷移 閱讀 (597) | 評論 (0) 編輯

asp.net core系列 34 EF保存數據(1)
摘要:一. 基本數據 每一個EF上下文實例都有一個 ChangeTracker(更改跟蹤器),它負責跟蹤須要寫入數據庫的更改。 當更改實體類的實例時(修改屬性,刪除實例,新建實例等),這些更改會記錄在 ChangeTracker 中,而後在調用 SaveChanges 時被寫入數據庫。 此數據庫提供程序負責  閱讀全文

posted @ 2019-02-28 16:00 花陰偷移 閱讀 (630) | 評論 (0) 編輯

asp.net core系列 33 EF查詢數據 (2)
摘要:一. 原生SQL查詢 接着上篇講。經過 Entity Framework Core 能夠在使用關係數據庫時降低到原始 SQL 查詢。 在沒法使用 LINQ 表達要執行的查詢時,或因使用 LINQ 查詢而致使低效的 SQL 查詢時很是有用。 原始 SQL 查詢可返回實體類型,或者從 EF Core 2  閱讀全文

posted @ 2019-02-27 16:09 花陰偷移 閱讀 (507) | 評論 (2) 編輯

asp.net core系列 32 EF查詢數據 必備知識(1)
摘要:一.查詢的工做原理 Entity Framework Core 使用語言集成查詢 (LINQ) 來查詢數據庫中的數據。 經過 LINQ 可以使用 C#(或你選擇的其餘 .NET 語言)基於派生上下文和實體類編寫強類型查詢。 LINQ 查詢的表示形式會傳遞給數據庫提供程序,進而轉換爲特定的數據庫查詢語言  閱讀全文

posted @ 2019-02-26 16:22 花陰偷移 閱讀 (923) | 評論 (3) 編輯

asp.net core系列 31 EF管理數據庫架構--必備知識 反向工程
摘要:一. 反向工程 反向工程是基於數據庫架構,生成的實體類和DbContext類代碼的過程,對於Visual Studio開發,建議使用PMC。對於其餘開發環境,請選擇.NET Core CLI工具(跨平臺)。 (1) 在程序包管理器控制檯(PMC)工具中使用命令Scaffold-DbContext 來  閱讀全文

posted @ 2019-02-25 13:57 花陰偷移 閱讀 (824) | 評論 (1) 編輯

asp.net core系列 30 EF管理數據庫架構--必備知識 遷移
摘要:一.管理數據庫架構概述 EF Core 提供兩種主要方法來保持 EF Core 模型和數據庫架構同步。一是以 EF Core 模型爲基準,二是以數據庫爲基準。 (1)若是但願以 EF Core 模型爲準,請使用遷移。 對 EF Core 模型進行更改時,此方法會以增量方式將相應架構更改應用到數據庫,  閱讀全文

posted @ 2019-02-22 16:19 花陰偷移 閱讀 (739) | 評論 (2) 編輯

asp.net core系列 29 EF模型配置(查詢類型,關係數據庫建模)
摘要:一.查詢類型 此功能是EF Core 2.1中的新功能。 EF Core除了實體類型以外,EF Core模型還能夠包含查詢類型,這些查詢類型是針對「未映射到實體類型」的數據獲取。好比視圖,或只讀數據表。 1.1 下面介紹下,查詢類型與實體類型共同與不一樣點: (1) 能夠在OnModelCreatin  閱讀全文

posted @ 2019-02-21 17:39 花陰偷移 閱讀 (573) | 評論 (2) 編輯

asp.net core系列 28 EF模型配置(字段,構造函數,擁有實體類型)
摘要:一. 支持字段 EF容許讀取或寫入字段而不是一個屬性。在使用實體類時,用面向對象的封裝來限制或加強應用程序代碼對數據訪問的語義時,這可能頗有用。沒法使用數據註釋配置。除了約定,還可使用Fluent API爲屬性配置支持字段。 1.1 約定 1.2 Fluent API 二. 構造函數 從開始 EF  閱讀全文

posted @ 2019-02-20 17:47 花陰偷移 閱讀 (599) | 評論 (2) 編輯

asp.net core系列 27 EF模型配置(索引,備用鍵,繼承)
摘要:一.索引 索引是許多數據存儲中的常見概念。雖然它們在數據存儲中的實現可能會有所不一樣,但它們可用於更有效地基於列(或列集)進行查找。按照約定,用做外鍵每一個屬性 (或組的屬性) 會自動建立索引。沒法使用數據註釋建立索引。 1.1 非惟一索引 Fluent API 在單個屬性上指定索引。默認狀況下,索引是  閱讀全文

posted @ 2019-02-19 12:29 花陰偷移 閱讀 (534) | 評論 (0) 編輯

asp.net core系列 26 EF模型配置(實體關係)
摘要:一.概述 EF實體關係定義了兩個實體互相關聯起來(主體實體和依賴實體的關係,對應數據庫中主表和子表關係)。 在關係型數據庫中,這種表示是經過外鍵約束來體現。本篇主要講一對多的關係。先了解下描述關係的術語。 (1) 依賴實體: 這是包含外鍵屬性的實體(子表)。有時稱爲 child 。 (2) 主體實體  閱讀全文

posted @ 2019-02-18 15:18 花陰偷移 閱讀 (603) | 評論 (0) 編輯

asp.net core系列 25 EF模型配置(隱藏屬性)
摘要:一. 隱藏屬性概述 隱藏屬性也叫影子屬性,該屬性不是在.net實體類中定義的屬性,而是在EFCore模型中爲該實體類型定義的屬性。這些屬性的值和狀態徹底在變動跟蹤器中維護。它有二個功能:(1)當數據庫中某些字段不想映射到實體類上公開的屬性時,隱藏屬性很是有用。(2)隱藏屬性一般是用於外鍵屬性,其中兩  閱讀全文

posted @ 2019-02-17 11:19 花陰偷移 閱讀 (441) | 評論 (0) 編輯

asp.net core系列 24 EF模型配置(主鍵,生成值,最大長度,併發標記)
摘要:一.主鍵 鍵用做每一個實體實例的主要惟一標識符。 使用關係數據庫時,這會映射到主鍵的概念。 還能夠配置不是主鍵的惟一標識符。按照約定,名爲 Id 或 <type name>Id 的屬性會配置爲實體的鍵。例以下面二個示例: 除了上面講到的約定,還能夠用數據註釋將單個屬性配置爲實體的鍵,下面示例使用數據注  閱讀全文

posted @ 2019-02-16 09:49 花陰偷移 閱讀 (623) | 評論 (0) 編輯

asp.net core系列 23 EF模型配置(概述, 類型和屬性的包含與排除)
摘要:一.模型配置概述 EF使用一組約定基於實體類的定義來構建模型。 可指定其餘配置以補充或替代約定的內容。本系列介紹的配置可應用於面向任何數據存儲的模型,以及面向任意關係數據庫時可應用的配置。 數據庫提供程序還可支持特定於具體數據存儲的配置,如Microsoft.EntityFrameworkCore.  閱讀全文

posted @ 2019-02-15 09:25 花陰偷移 閱讀 (559) | 評論 (0) 編輯

asp.net core 系列 22 EF(鏈接字符串,鏈接復原,DbContext)
摘要:一.鏈接字符串 在上二篇中,ASP.NET Core 應用程序鏈接字符串是寫死在ConfigureServices代碼中,下面介紹經過配置來實現。鏈接字符串能夠存儲在 appsettings.json、用戶機密存儲、其餘配置源中。 下面示例演示appsettings.json 中存儲的鏈接字符串,這  閱讀全文

posted @ 2019-02-14 09:47 花陰偷移 閱讀 (1739) | 評論 (0) 編輯

asp.net core 系列 21 EF現有數據庫進行反向工程
摘要:一.概述 在上篇中使用EF基於數據模型建立數據庫, 本篇繼續使用 EF 基於數據庫建立數據模型。 實現對已有數據庫進行反向工程,來構建數據訪問的 ASP.NET Core MVC 應用程序。已有數據庫使用上篇的EFGetStarted.AspNetCore.NewDb庫。這裏仍是使用Visual S  閱讀全文

posted @ 2019-02-13 09:32 花陰偷移 閱讀 (860) | 評論 (0) 編輯

asp.net core 系列 20 EF基於數據模型建立數據庫
摘要:一.概述 本章使用 Entity Framework Core 構建執行基本數據訪問的 ASP.NET Core MVC 應用程序。使用遷移(migrations)基於數據模型建立數據庫,是一種code first模式。能夠在Windows 上使用 Visual Studio 2017,或在 Win  閱讀全文

posted @ 2019-02-12 09:43 花陰偷移 閱讀 (1112) | 評論 (3) 編輯

asp.net core 系列 19 EFCore介紹
摘要:一.概述 目前最新的EF Core版本是3.0,最穩定的EF Core版本是2.2。EF Core 的計劃與 .NET Core以及 ASP.NET Core 版本同步。EF Core 是一個 .NET Standard庫,使用 EF Core 開發面向 .NET Core 的應用。生成 .NET  閱讀全文

posted @ 2019-01-30 09:42 花陰偷移 閱讀 (1056) | 評論 (1) 編輯

asp.net core 系列 18 web服務器實現
摘要:一. ASP.NET Core Module 在介紹ASP.NET Core Web實現以前,先來了解下ASP.NET Core Module。該模塊是插入 IIS 管道的本機 IIS 模塊(本機是指程序所部署的服務器)。是基於windows平臺處理 IIS和進程內IISHttpServer或Kes  閱讀全文

posted @ 2019-01-29 09:17 花陰偷移 閱讀 (1515) | 評論 (2) 編輯

asp.net core 系列 17 通用主機 IHostBuilder
摘要:一.概述 ASP.NET Core 通用主機 (HostBuilder),該主機對於託管不處理 HTTP 請求的應用很是有用。通用主機的目標是將 HTTP 管道從 Web 主機 API 中分離出來,從而啓用更多的主機方案。 基於通用主機的消息、後臺任務和其餘非 HTTP 工做負載可從橫切功能(如配置  閱讀全文

posted @ 2019-01-28 09:13 花陰偷移 閱讀 (1070) | 評論 (0) 編輯

asp.net core 系列 16 Web主機 IWebHostBuilder
摘要:一.概述 在asp.net core中,Host主機負責應用程序啓動和生存期管理。host主機包括Web 主機(IWebHostBuilder)和通用主機(IHostBuilder)。Web 主機是適用於託管 Web 應用;通用主機(ASP.NET Core 2.1 或更高版本)是適用於託管非 We  閱讀全文

posted @ 2019-01-25 11:06 花陰偷移 閱讀 (1175) | 評論 (2) 編輯

asp.net core 系列 15 中間件
摘要:一.概述 中間件(也叫中間件組件)是一種裝配到應用管道以處理請求和響應的軟件。 每一個組件:(1)選擇是否將請求傳遞到管道中的下一個組件;(2)能夠在管道中的下一個組件以前和以後執行工做。 請求委託用於生成請求管道。 請求委託會處理每一個 HTTP 請求。使用如下方法配置請求委託:Run, Map, U  閱讀全文

posted @ 2019-01-24 10:26 花陰偷移 閱讀 (981) | 評論 (0) 編輯

asp.net core 系列 14 錯誤處理
摘要:一.概述 本文介紹處理 ASP.NET Core 應用中常見錯誤的一些方法。主要是關於:開發環境異常頁;非開發環境配置自定義異常處理頁;配置狀態代碼頁(沒有正文響應,http狀態400~599的)。 1.1 開發環境異常頁 要將應用配置爲顯示有關異常的詳細信息的頁面,請使用開發環境異常頁。要環境設置  閱讀全文

posted @ 2019-01-23 09:17 花陰偷移 閱讀 (722) | 評論 (0) 編輯

asp.net core 系列 13 日誌
摘要:一.概述 ASP.NET Core 支持適用於各類內置和第三方日誌記錄, 供程序的日誌記錄 API,本文介紹瞭如何將日誌記錄 API 與內置提供程序一塊兒使用。對於第三方日誌記錄提供程序使用,文章最後有連接。 1.1 添加內置日誌提供程序 日誌記錄提供程序可以用於顯示日誌信息或存儲日誌,好比控制檯提供  閱讀全文

posted @ 2019-01-22 09:44 花陰偷移 閱讀 (940) | 評論 (2) 編輯

asp.net core 系列 12 選項 TOptions
摘要:一.概述 本章講的選項模式是對Configuration配置的功能擴展。 講這篇時有個專用名詞叫「選項類(TOptions)」 。該選項類做用是指:把選項類中的屬性與配置來源中的鍵關聯起來。舉個例,假設json文件有個Option1鍵,選項類中也有個叫Option1的屬性名,通過選項配置,這樣就能把  閱讀全文

posted @ 2019-01-21 11:47 花陰偷移 閱讀 (832) | 評論 (1) 編輯

asp.net core 系列 11 配置configuration (下)
摘要:四. 文件配置提供程序AddIniFile、 AddXmlFile、AddJsonFile FileConfigurationProvider 是從文件系統加載配置的基類。 如下配置提供程序專用於特定文件類型: (1) INI 配置提供程序 IniConfigurationProvider: Fil  閱讀全文

posted @ 2019-01-18 14:06 花陰偷移 閱讀 (804) | 評論 (0) 編輯

asp.net core 系列 10 配置configuration (上)
摘要:一. ASP.NET Core 中的配置概述 ASP.NET Core 中的應用配置是基於鍵值對,由configuration 程序提供。 configuration 將從各類配置源提供程序操做鍵值對,這些配置源能夠是: (1) Azure Key Vault(是基於雲的服務的安全存儲應用機密) (  閱讀全文

posted @ 2019-01-17 17:39 花陰偷移 閱讀 (1143) | 評論 (0) 編輯

asp.net core 系列 9 三種運行環境和IIS發佈
摘要:一.在asp.net core中使用多個環境 ASP.NET Core 配置是基於運行時環境, 使用環境變量。ASP.NET Core 在應用啓動時讀取環境變量ASPNETCORE_ENVIRONMENT,並將該值存儲在 IHostingEnvironment.EnvironmentName 中。A  閱讀全文

posted @ 2019-01-16 15:00 花陰偷移 閱讀 (1064) | 評論 (6) 編輯

asp.net core 系列 8 Razor框架路由(下)
摘要:三.頁面路由操做約定 接着上篇講asp.net core 系列 7 Razor框架路由。在上篇繼續第三節 "頁面路由操做約定" 的最後一小節 AddPageRoute 。 使用 AddPageRoute 配置路由,該路由與指定頁面關聯, 使用指定的路由生成頁面連接。 AddPageRoute 使用  閱讀全文

posted @ 2019-01-15 16:47 花陰偷移 閱讀 (838) | 評論 (0) 編輯

asp.net core 系列 7 Razor框架路由(上)
摘要:一.概述 在上二篇中,主要是介紹了asp.net core mvc中路由的使用,這篇繼續介紹路由在ASP.NET Core Razor中的使用。Razor Pages應該使用默認的傳統路由,從應用程序的Pages文件夾中提供命令資源。還可使用其餘約定來自定義 Razor Pages 路由行爲。 在  閱讀全文

posted @ 2019-01-14 11:13 花陰偷移 閱讀 (1213) | 評論 (0) 編輯

asp.net core 系列 6 MVC框架路由(下)
摘要:一.URL 生成 接着上篇講MVC的路由,MVC 應用程序可使用路由的 URL 生成功能,生成指向操做的 URL 連接。 生成 URL 可消除硬編碼 URL,使代碼更穩定、更易維護。 此部分重點介紹 MVC 提供的 URL 生成功能,而且僅涵蓋 URL 生成工做原理的基礎知識。 IUrlHelpe  閱讀全文

posted @ 2019-01-11 10:11 花陰偷移 閱讀 (1092) | 評論 (7) 編輯

asp.net core 系列 5 MVC框架路由(上)
摘要:一. 概述 介紹asp.net core路由時,我初步想了下,分幾篇來講明。 路由的知識點不少,參考了官方文檔提取出一些重要的知識點來講。 在ASP.NET Core中是使用路由中間件來匹配傳入請求的 URL 並將它們映射到操做(action方法)。路由是在程序啓動時進行傳統路由或屬性路由定義。 路  閱讀全文

posted @ 2019-01-09 17:25 花陰偷移 閱讀 (1575) | 評論 (4) 編輯

asp.net core 系列 4 注入服務的生存期
摘要:一.服務的生存期 在容器中每一個註冊的服務,根據程序應用需求均可以選擇合適的服務生存期,ASP.NET Core 服務有三種生存期配置: (1) Transient:暫時生存期,在每次請求時被建立。 這種生存期適合輕量級的,無狀態的服務。 (2) Scoped: 做用域生存期,在每次請求被建立一次。  閱讀全文

posted @ 2019-01-08 10:47 花陰偷移 閱讀 (1527) | 評論 (6) 編輯

asp.net core 系列 3 依賴注入服務
摘要:一. 依賴注入概述 在軟件設計的通用原則中,SOLID是很是流行的縮略語,它由5個設計原則的首字母構成:單一原則(S)、開放封閉原則(O)、里氏替換原則(L)、接口分離原則(I)、依賴反轉原則(D)。本篇介紹依賴反轉原則以及在ASP.NET Core中的實現。 直接依賴是指:當一個類須要另外一個類協做  閱讀全文

posted @ 2019-01-06 11:36 花陰偷移 閱讀 (1705) | 評論 (2) 編輯

asp.net core 系列 2 啓動Startup類介紹
摘要:一.Startup類 ASP.NET Core 應用是一個控制檯應用,它在其 Program.Main 方法中建立 Web 服務器。其中Main方法是應用的託管入口點,Main 方法調用 WebHost.CreateDefaultBuilder來建立 Web 主機,自動分配了 Kestrel Web  閱讀全文

posted @ 2019-01-05 13:57 花陰偷移 閱讀 (2310) | 評論 (1) 編輯

asp.net core 系列 1 概述
摘要:一. 概述 ASP.NET Core 是一個跨平臺的高性能開源框架,能夠用來:建置 Web 應用程序和服務、IoT應用和移動後端、在 Windows macOS 和 Linux 上使用喜好的開發工具、部署到雲或本地、NET Core 或 .NET Framework 上運行。 ASP.NET Cor  閱讀全文

posted @ 2019-01-02 13:49 花陰偷移 閱讀 (2623) | 評論 (5) 編輯

相關文章
相關標籤/搜索