.Net Core + DDD基礎(chǔ)分層 + 項(xiàng)目基本框架 + 個(gè)人總結(jié)
為什么要寫這篇文章
1,在大半年前,公司開(kāi)發(fā)任務(wù)比較輕松,自己不知道干什么,但是又想要學(xué)習(xí)技術(shù),比較迷茫,后面我接觸到了博客園,看了一個(gè)帖子,深有感觸,我當(dāng)時(shí)不知道學(xué)習(xí)什么,于是我信息給他,他居然回復(fù)我了,并且還給我建議學(xué)習(xí)的方向,以及學(xué)習(xí)的方法,我十分的感謝他。
2,在一次面試中,有人問(wèn)我,你工作1年多了有沒(méi)有做過(guò)自我總結(jié),你覺(jué)得你的優(yōu)勢(shì)是什么,我當(dāng)時(shí)吞吞吐吐的回答了,內(nèi)心十分的慌張,在此補(bǔ)上總結(jié)。
3,學(xué)習(xí)了一段時(shí)間.Net Core了,記憶力比較差,記錄下來(lái),為以后用時(shí)做準(zhǔn)備。
項(xiàng)目基礎(chǔ)分層
在學(xué)習(xí)DDD的分層知識(shí),現(xiàn)在的代碼里面只運(yùn)用了一些DDD戰(zhàn)術(shù)設(shè)計(jì)的知識(shí),現(xiàn)在這樣分層為了以后知識(shí)積累夠了,在上面完善,目前的技術(shù)很菜,結(jié)合網(wǎng)上以及使用的理解寫出自己使用過(guò)或者能理解部分。


基礎(chǔ)設(shè)施層
基礎(chǔ)設(shè)施層使用的相關(guān)知識(shí):Code First ,EF Core,Autofac依賴注入,倉(cāng)儲(chǔ)模式的實(shí)現(xiàn)接口,領(lǐng)域服務(wù)的實(shí)現(xiàn)接口,緩存,以及各種基礎(chǔ)工具類
一,Code First:使用Code First 數(shù)據(jù)遷移到數(shù)據(jù)庫(kù)。
常用的數(shù)據(jù)庫(kù)遷移命令: Add-Migration 遷移名 —— 添加本次遷移 Update-Database——將本次遷移到數(shù)據(jù)庫(kù) Add-Migration InitialCreate -IgnoreChanges -—— 創(chuàng)建一次空的數(shù)據(jù)遷移:已現(xiàn)在版本為起始點(diǎn)
二,EF Core :軟刪除 ——全局過(guò)濾刪除的狀態(tài),AsNoTracking() ——不持久化到數(shù)據(jù)庫(kù)時(shí)的查詢使用 Any——查詢判斷使用Any ,Z.EntityFramework.Plus-——批量修改,刪除,增刪改查,簡(jiǎn)單封裝異步 Anysnc Await 方法
三,工具類,例如MD5,AutoMapperHelper,LamdaHelper,RedisHelper簡(jiǎn)單應(yīng)用,讀取配置文件,統(tǒng)一返回參數(shù)等。
四,Redis緩存,多種數(shù)據(jù)類型,查詢,插入效率高,Redis與數(shù)據(jù)庫(kù)同步策略,先更新數(shù)據(jù)庫(kù)在刪除緩存,延時(shí)雙刪,(延時(shí),根據(jù)數(shù)據(jù)查詢的數(shù)據(jù)來(lái)判斷延時(shí)的時(shí)間),使用StackExchange.Redis
應(yīng)用層
應(yīng)用層使用的相關(guān)知識(shí):AutoMapper,Dto,Autofac依賴注入
一,Dto:數(shù)據(jù)傳輸對(duì)象,主要是展現(xiàn)層和應(yīng)用層傳輸數(shù)據(jù)
二,AutoMapper:對(duì)象之間傳輸數(shù)據(jù),先使用倉(cāng)儲(chǔ)查詢出數(shù)據(jù),然后通過(guò)AutoMapper轉(zhuǎn)換成前端需要的數(shù)據(jù)返回
領(lǐng)域?qū)?/h2>
領(lǐng)域?qū)邮褂玫南嚓P(guān)知識(shí):實(shí)體,值對(duì)象,領(lǐng)域服務(wù)接口,倉(cāng)儲(chǔ)接口,聚合,Autofac依賴注入
一,實(shí)體:有唯一的標(biāo)識(shí)(唯一,不可變),包含業(yè)務(wù)邏輯,以及自身的驗(yàn)證,構(gòu)造函數(shù)實(shí)例化,實(shí)體的Set應(yīng)設(shè)置為私有的
二,值對(duì)象:沒(méi)有唯一的標(biāo)識(shí),用來(lái)描述一個(gè)東西的特征,代表是什么
三,聚合:聚合根是實(shí)體,聚合是對(duì)象的組合,由聚合本身維護(hù)自身的一致性,封裝業(yè)務(wù)邏輯,聚合盡量小,聚合之間通過(guò)唯一標(biāo)識(shí)引用
四,倉(cāng)儲(chǔ):倉(cāng)儲(chǔ)是針對(duì)聚合的,封裝領(lǐng)域邏輯,明確查詢的意圖,倉(cāng)儲(chǔ)中只維護(hù)聚合的狀態(tài),不進(jìn)行持久化,倉(cāng)儲(chǔ)可以方便單元測(cè)試,更換ORM
五,領(lǐng)域服務(wù):,領(lǐng)域服務(wù)是無(wú)狀態(tài)的,有些業(yè)務(wù)邏輯不好放在聚合里面的可以使用領(lǐng)域服務(wù),多個(gè)聚合根協(xié)調(diào),領(lǐng)域服務(wù)中可以使用倉(cāng)儲(chǔ)
六,Autofac依賴注入:有利于項(xiàng)目層與層之間的解耦,方便單元測(cè)試,構(gòu)造函數(shù)注入,依賴倒置,通過(guò)約定進(jìn)行程序集的注入
展現(xiàn)層
一,展現(xiàn)層使用的相關(guān)知識(shí):.Net Core WebApi ,MVC,JWT Swagger,日志異常的捕捉,模型的驗(yàn)證,Log4Net,Autofac依賴注入,過(guò)濾器
二,JWT:JWT包含了使用.分隔的三部分: Header 頭部 Payload 負(fù)載 Signature 簽名,在前端每次請(qǐng)求加上JWT 簽發(fā)的Token 來(lái)替代Session,進(jìn)行訪問(wèn)頁(yè)面的驗(yàn)證
三,Swagger:可以使用Swagger來(lái)請(qǐng)求WebApi ,以及查看WebApi 接口,Swagger可以做接口文檔
四,Log4Net:日志異常的全局捕捉,記錄日志到TXT中
五,過(guò)濾器:使用過(guò)濾器來(lái)進(jìn)行模型的驗(yàn)證 ,Log4Net的日志異常的全局捕捉,以及權(quán)限的訪問(wèn)
簡(jiǎn)單的單元測(cè)試
單元測(cè)試使用的相關(guān)知識(shí):Xunit,Autofac依賴注入
學(xué)習(xí)的方向,以及目標(biāo)
謝謝蟋蟀大哥的幾句指導(dǎo),學(xué)習(xí).Net Core 開(kāi)闊了我的視野,才了解到DDD,ABP,以及上面的技術(shù),雖然我的技術(shù)還很菜,許多技術(shù)以及基礎(chǔ)知識(shí)都不太牢固,但是我還會(huì)繼續(xù)學(xué)習(xí),謝謝博客園里面每一位技術(shù)分享者。
一,方向:學(xué)習(xí)Redis ,消息隊(duì)列, 讀寫分離,DDD ,業(yè)務(wù)分析能力, ABP
二,目標(biāo):明年成為一個(gè)中級(jí)的程序員

浙公網(wǎng)安備 33010602011771號(hào)