ApiTemplate:.net後端項目模板完善與總結

来源:https://www.cnblogs.com/cqhaibin/archive/2020/06/27/13199186.html
-Advertisement-
Play Games

ApiTemplate後端項目開發模板,發佈也有一段時間了。為了補充應用場景,以及詳細說明本人總結的一些開發經驗,現已常見的《用戶/登錄許可權驗證》功能模塊來進行詳細的講解。我會以為開發此模擬的實現路徑為主線進行說明,希望能幫助到某些開發朋友。一、模塊分解模塊分析是按照《C4-架構圖》理念做的,主要分 ...


      ApiTemplate後端項目開發模板,發佈也有一段時間了。為了補充應用場景,以及詳細說明本人總結的一些開發經驗,現已常見的《用戶/登錄許可權驗證》功能模塊來進行詳細的講解。我會以為開發此模擬的實現路徑為主線進行說明,希望能幫助到某些開發朋友。

一、模塊分解

image

模塊分析是按照《C4-架構圖》理念做的,主要分為

1. 系統上下文:顯示當前構建的系統與現有系統的依賴關係,從巨集觀視角看

2. 容器:將當前構建的系統放大,顯示出系統的 應用程式、數據存儲、微服務等信息

3. 組件:放大單個《容器》後,顯示其容器內部的組件列表、及關係。

4. 代碼:放大單個《組件》後,顯示其實現細節

註意:

1. 更正說明:上圖中的《容器》應該改為《組件》,根據《C4-架構圖》的定義,使用《組件》更貼切,因為想表達的是《登錄/許可權》模擬的子組件列表

2. 登錄驗證/線上用戶管理:此兩個組件為業務核心組件,設計與實現時要重點考慮

3. 獲取用戶/獲取資源/角色:此兩個組件主要從第三方系統獲取數據,要考慮使用工廠模式進行策略切換。

二、核心代碼

image

1. 上圖表示IOnlineUserMgr介面的實現類應有的依賴,IOnlineUserMgr規範《線上用戶管理》,包含添加線上用戶、自動移除超時過期的用戶等。

2. IReadAuthRepository/IRoleAndResDepend:規範對用戶、資源、角色的依賴。對應《獲取用戶》、《獲取資源/角色》組件

3. ITokenRepository:登錄用戶持久化,相當於用戶登錄記錄

4. IUserEntity:用戶實例規範,對應《登錄驗證》,提供資源、許可權驗證等相關介面

5. IUserEntiy和IOnlineUserMgr的介面實現在領域實現層(BAccurate.Implement項目)中,這樣便從結構上對 業務領域組件 和 其他依賴組件進行瞭解耦。

6. 具體的代碼實現可以移步至github地址,代碼太多不方便博客文章展示

三、視頻分享

B站視頻介紹:https://www.bilibili.com/video/BV1Rz4y1Q7XY/,有興趣小伙伴可以觀看喲Winking smile

四、經驗總結

1. 通過《C4-架構圖》對系統從巨集觀->微觀的逐步細化

2. 業務領域組件應該要高內聚

3. 對依賴組件要低耦合

4. 不急著進行資料庫設計,先梳理好業務領域組件之間關係,以及核心業務實現。

5. 資料庫存儲實體與領域實體強分隔,這樣更能做好業務變更與升級。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 時間處理相關類: 1.java.util.Date:時間類 2.java.text.DateFormat:時間格式化類(抽象類),實現類:java.text.SimpleDateFormat 3.java.util.Calendar:日曆類(抽象類),實現類:java.util.GergorianC ...
  • @ 前言 AOP,也就是面向切麵編程,它可以將公共的代碼抽離出來,動態的織入到目標類、目標方法中,大大提高我們編程的效率,也使程式變得更加優雅。如事務、操作日誌等都可以使用AOP實現。這種織入可以是在運行期動態生成代理對象實現,也可以在編譯期、類載入時期靜態織入到代碼中。而Spring正是通過第一種 ...
  • 單例模式(Singleton) /*** * Class Singleton 單例模式 * 單例類不能再其它類中直接實例化,只能被其自身實例化。它不會創建實例副本,而是會向單例類內部存儲的實例返回一個引用。 * 1.私有的構造函數、克隆函數,防止外部代碼new、clone * 2.私有的靜態的成員變 ...
  • 參考資料:https://www.php.net/manual/zh/language.oop5.php 多態,允許將子類類型的指針賦值給父類類型的指針。 封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。 繼承,它可以使用現有類的所 ...
  • 一 條件分支 1 python的比較操作符 2 python的條件分支語法 語法格式: if條件: 條件為(True)真執行的操作 else: 條件為假(False)執行的操作 跟其他語言的區別: if和else判斷語句後面必須要有冒號(其它語言沒有) 執行體的內容不需要用花括弧擴起來,所以必須嚴格 ...
  • 對於php開發小白來說搭建一個php運行環境就是一道坎! 因為要做php開發,搭建一個能夠運行php網站的伺服器環境是第一步,傳統的php環境軟體非常複雜,好在很多公司開發了一鍵搭建php安裝環境,一鍵進行php環境配置,大大節省了搭建php mysql環境的時間!對老手來說安裝配置php環境也不再 ...
  • 上次幫小王解決瞭如何在 Spring Boot 中使用 JDBC 連接 MySQL 後,我就一直在等,等他問我第三個問題,比如說如何在 Spring Boot 中使用 HikariCP 連接池。但我等了四天也沒有等到任何音訊,似乎他從我的世界里消失了,而我卻仍然沉醉在他拍我馬屁的美妙感覺里。 突然感 ...
  • 思路 自定義註解 @NoRepeatSubmit 標記所有Controller中的提交請求 通過AOP 對所有標記了 @NoRepeatSubmit 的方法攔截 在業務方法執行前,獲取當前用戶的 token(或者JSessionId)+ 當前請求地址,作為一個唯一 KEY,去獲取 Redis 分散式 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...