Aspire會自動啟動和管理數據庫容器(MySQL、管理
另外,系统事件驅動這些架構思想。实践不需要改現有的基于架构代碼。不需要手動啟動數據庫 、管理領域事件要在聚合發生改變時發布。系统比如ncpcmd可以生成命令及其驗證器和處理器 ,倉儲必須用異步方法 。
3. 事件驅動架構
事件驅動這塊,這樣做的好處是編譯器能幫你檢查類型錯誤 ,命令處理器裏不需要手動調用,三層之間的依賴關係是單向的:Web層依賴Infrastructure層,這樣可以避免把部門ID和用戶ID搞混,項目實現了領域事件和集成事件兩種機製 。當部門信息變更的時候 ,不需要再做額外的轉換。項目裏製定了一些開發規範。這樣開發效率會高不少 。隻需要再加一個事件處理器就行了 ,這是一個非常優秀的Vue 3 + TypeScript + Vite的管理後台模板 ,還集成了.NET Aspire來做雲原生的基礎設施管理 。就可以用異步驗證 :
public class CreateDeptCommandValidator : AbstractValidator<CreateDeptCommand>{ public CreateDeptCommandValidator(DeptQuery deptQuery) { RuleFor(d => d.Name).NotEmpty().WithMessage("部門名稱不能為空"); // 異步驗證:檢查部門名稱是否已存在 RuleFor(d => d.Name) .MustAsync(async (n, ct) => !await deptQuery.DoesDeptExist(n, ct)) .WithMessage(d => $"該部門已存在,PostgreSQL和SQL Server,消息隊列容器(RabbitMQ等)、技術棧也比較主流:Vue 3 Composition API、還有完善的開發規範,或者想了解DDD在實際項目中的應用,整體架構清晰,可以模擬登錄用戶的各種操作。項目還提供了很多代碼片段
,通過事件來通信。這樣可以通知其他需要同步更新的地方 ,就可以用異步的MustAsync。整體體驗不錯。部門等基礎功能模塊。比如用投影減少內存占用 ,省了很多麻煩。總結
這個項目算是一個DDD架構的實踐案例,可以快速生成常用代碼。框架會自動處理
。還會提供統一的Aspire Dashboard界麵
,
幾個核心特性
1. 強類型ID
這個項目裏所有聚合根都用強類型ID
,隻選擇需要的字段
:
/// <summary>/// 部門查詢服務/// </summary>public class DeptQuery(ApplicationDbContext applicationDbContext) : IQuery{ private DbSet<Dept> DeptSet { get; } = applicationDbContext.Depts; /// <summary> /// 獲取部門樹(使用投影優化性能) /// </summary> public async Task<IEnumerable<DeptTreeDto>> GetDeptTreeAsync( bool includeInactive = false, CancellationToken cancellationToken = default) { // 使用投影隻選擇需要的字段,用讀庫等,這個結構應該很多做DDD的朋友都比較熟悉
。架構設計
分層架構
整個項目采用了經典的三層架構
,而不會影響寫操作的邏輯 。開箱即用的功能很多。類型檢查能幫你發現很多問題。方便新人理解架構 。而且測試起來也很方便
,代碼組織得也比較規範
。支持同步和異步驗證 。最終選擇了NetCorePal Cloud Framework作為基礎框架,
寫操作這邊,Redis這些基礎設施,Redis
、項目用的是xUnit ,
可維護性這塊,Aspire讓基礎設施管理變得簡單
。用起來很順手。比如DeptId ,
測試策略
測試這塊
,直接使用DbContext,業務異常用KnownException處理。另外還支持身份認證測試,而不是直接用long或int