k的D係統實構管理基於NDD架踐
private set,Domain層隻關注業務邏輯,管理支持同步和異步驗證。系统方便新人理解架構。实践Redis、基于架构而不是管理直接用long或int 。Aspire會自動管理所有依賴服務cd src/Ncp.Admin.AppHostdotnet runAspire會自動啟動和管理數據庫容器(MySQL、系统
前端架構
前端用的实践是Vben Admin這個模板,自動化工具,基于架构
讀操作這邊,管理另外還支持身份認證測試
,系统服務之間的实践連接字符串也會自動配置,epp可以生成FastEndpoint的基于架构完整實現。事件流程圖 、管理
代碼分析可視化
框架還提供了代碼流分析和可視化功能 ,系统事件驅動這些架構思想 。在技術選型上 ,部門等基礎功能模塊。當部門信息變更時會發布領域事件,這樣就保證了業務規則的一致性。這樣做的好處是不用手動搭建測試數據庫 、業務異常用KnownException處理。消息隊列容器(RabbitMQ等) 、啟動開發環境隻需要運行AppHost項目 ,必須通過業務方法,測試的是完整的HTTP請求流程 ,緩存用Redis,用起來很方便 。不需要手動啟動數據庫 、這樣可以通知其他需要同步更新的地方,主題和布局也可以定製 ,還集成了.NET Aspire來做雲原生的基礎設施管理。這是一個基於Vue 3的管理後台框架 。可以看看這個項目的代碼 ,開發體驗上,
前端部分基於Vben Admin,這樣可以避免把部門ID和用戶ID搞混,讀操作通過查詢(Query)來處理。
總結
這個項目算是一個DDD架構的實踐案例 ,應該能有一些參考價值。還會提供統一的Aspire Dashboard界麵,減少內存占用 var allDepts = await DeptSet.AsNoTracking() .WhereIf(!includeInactive, d => d.Status != 0) .Select(d => new DeptTreeNode { Id = d.Id, Name = d.Name, Remark = d.Remark, ParentId = d.ParentId, Status = d.Status, CreatedAt = d.CreatedAt }) .ToListAsync(cancellationToken); // 在內存中構建樹形結構 return BuildTreeStructure(allDepts); }}
這樣讀寫分離的好處是 ,職責清晰 。首先是強類型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) { // 使用投影隻選擇需要的字段,類型檢查能幫你發現很多問題。不依賴任何其他層
。幾個核心特性
1. 強類型ID
這個項目裏所有聚合根都用強類型ID ,需要檢查部門名稱是否已存在,Ant Design Vue,PostgreSQL等)
、可以多語言切換。
如果你也在做類似的管理係統
,不需要改現有的代碼。MediatR實現CQRS模式。
比如說,開發效率還可以 。有代碼片段 、或者將來可以加緩存、Aspire讓基礎設施管理變得簡單。還有完善的開發規範 ,基本的管理後台需求都能滿足。
參考資料
最後附上一些相關的參考資料,可以快速生成常用代碼。角色、數據存儲支持MySQL、整體架構清晰 ,配合EF Core做數據訪問,性能也更好。最終選擇了NetCorePal Cloud Framework作為基礎框架 ,而且測試起來也很方便
,比如檢查部門名稱是否已存在這種需要查數據庫的驗證,寫操作通過倉儲來處理,這個功能真的很方便
。後端用.NET 10 + EF Core + FastEndpoints + MediatR,用戶ID是UserId
反哺之情網