.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

應用層

應用層使用的相關知識: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

二,目標:明年成為一個中級的程序員

項目源碼地址

https://github.com/Fengddd/ProjectNetCore.git


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM