1. 程式人生 > >.Net Core + DDD基礎分層 + 專案基本框架 + 個人總結

.Net Core + DDD基礎分層 + 專案基本框架 + 個人總結

為什麼要寫這篇文章

1,在大半年前,公司開發任務比較輕鬆,自己不知道幹什麼,但是又想要學習技術,比較迷茫,後面我接觸到了部落格園,看了一個帖子,深有感觸,我當時不知道學習什麼,於是我資訊給他,他居然回覆我了,並且還給我建議學習的方向,以及學習的方法,我十分的感謝他。 2,在一次面試中,有人問我,你工作1年多了有沒有做過自我總結,你覺得你的優勢是什麼,我當時吞吞吐吐的回答了,內心十分的慌張,在此補上總結。 3,學習了一段時間.Net Core了,記憶力比較差,記錄下來,為以後用時做準備。

專案基礎分層

在學習DDD的分層知識,現在的程式碼裡面只運用了一些DDD戰術設計的知識,現在這樣分層為了以後知識積累夠了,在上面完善,目前的技術很菜,結合網上以及使用的理解寫出自己使用過或者能理解部分。

基礎設施層

基礎設施層使用的相關知識:Code First ,EF Core,Autofac依賴注入,倉儲模式的實現介面,領域服務的實現介面,快取,以及各種基礎工具類 一,Code First:使用Code First 資料遷移到資料庫。 常用的資料庫遷移命令: Add-Migration 遷移名 —— 新增本次遷移 Update-Database——將本次遷移到資料庫 Add-Migration InitialCreate -IgnoreChanges -—— 建立一次空的資料遷移:已現在版本為起始點

二,EF Core :軟刪除 ——全域性過濾刪除的狀態,AsNoTracking() ——不持久化到資料庫時的查詢使用 Any——查詢判斷使用Any ,Z.EntityFramework.Plus-——批量修改,刪除,增刪改查,簡單封裝非同步 Anysnc Await 方法

三,工具類,例如MD5,AutoMapperHelper,LamdaHelper,RedisHelper簡單應用,讀取配置檔案,統一返回引數等。

四,Redis快取,多種資料型別,查詢,插入效率高,Redis與資料庫同步策略,先更新資料庫在刪除快取,延時雙刪,(延時,根據資料查詢的資料來判斷延時的時間),使用StackExchange.Redis 瞭解的不夠深入目前只是用了String,準備用來儲存使用者的許可權,以及Token

應用層

應用層使用的相關知識:AutoMapper,Dto,Autofac依賴注入 一,Dto:資料傳輸物件,主要是展現層和應用層傳輸資料

二,AutoMapper:物件之間傳輸資料,先使用倉儲查詢出資料,然後通過AutoMapper轉換成前端需要的資料返回

領域層

領域層使用的相關知識:實體,值物件,領域服務介面,倉儲介面,聚合,Autofac依賴注入 一,實體:有唯一的標識(唯一,不可變),包含業務邏輯,以及自身的驗證,建構函式例項化,實體的Set應設定為私有的

二,值物件:沒有唯一的標識,用來描述一個東西的特徵,代表是什麼

三,聚合:聚合根是實體,聚合是物件的組合,由聚合本身維護自身的一致性,封裝業務邏輯,聚合儘量小,聚合之間通過唯一標識引用

四,倉儲:倉儲是針對聚合的,封裝領域邏輯,明確查詢的意圖,倉儲中只維護聚合的狀態,不進行持久化,倉儲可以方便單元測試,更換ORM

五,領域服務:,領域服務是無狀態的,有些業務邏輯不好放在聚合裡面的可以使用領域服務,多個聚合根協調,領域服務中可以使用倉儲

六,Autofac依賴注入:有利於專案層與層之間的解耦,方便單元測試,建構函式注入,依賴倒置,通過約定進行程式集的注入

展現層

一,展現層使用的相關知識:.Net Core WebApi ,MVC,JWT Swagger,日誌異常的捕捉,模型的驗證,Log4Net,Autofac依賴注入,過濾器

二,JWT:JWT包含了使用.分隔的三部分: Header 頭部 Payload 負載 Signature 簽名,在前端每次請求加上JWT 簽發的Token 來替代Session,進行訪問頁面的驗證

三,Swagger:可以使用Swagger來請求WebApi ,以及檢視WebApi 介面,Swagger可以做介面文件

四,Log4Net:日誌異常的全域性捕捉,記錄日誌到TXT中

五,過濾器:使用過濾器來進行模型的驗證 ,Log4Net的日誌異常的全域性捕捉,以及許可權的訪問

簡單的單元測試

單元測試使用的相關知識:Xunit,Autofac依賴注入

學習的方向,以及目標

謝謝蟋蟀大哥的幾句指導,學習.Net Core 開闊了我的視野,才瞭解到DDD,ABP,以及上面的技術,雖然我的技術還很菜,許多技術以及基礎知識都不太牢固,但是我還會繼續學習,謝謝部落格園裡面每一位技術分享者。 一,方向:學習Redis ,訊息佇列, 讀寫分離,DDD ,業務分析能力, ABP

二,目標:明年成為一箇中級的程式設計師

專案原始碼地址