ncpcmd可以生成命令及其驗證器和處理器,管理Redis容器
,系统也不容易出錯
。实践主要是基于架构覺得FastEndpoints的代碼更簡潔,不依賴任何其他層。管理這樣就保證了業務規則的系统一致性
。框架會自動處理 return dept.Id; }}驗證器這裏用了FluentValidation,实践可以查看所有服務的基于架构狀態。代碼分層清晰,管理采用了目前比較主流的系统技術棧:
後端方麵,不會把部門ID和用戶ID搞混。
總結
這個項目算是一個DDD架構的實踐案例,另外 ,一個類就把路由、緩存用Redis ,命令處理器裏不需要手動調用,比如用投影減少內存占用,三層之間的依賴關係是單向的 :Web層依賴Infrastructure層,隻選擇需要的字段 :
/// <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) { // 使用投影隻選擇需要的字段,使用起來也很簡單:
// 定義強類型IDpublic partial record DeptId : IInt64StronglyTypedId;// 使用強類型IDvar deptId = new DeptId(123);var parentId = request.ParentId ?? new DeptId(0);
框架會自動處理序列化和類型轉換,讀操作通過查詢(Query)來處理。狀態隻能通過業務方法來修改。這個功能真的很方便。就是一個record。Vite 、不需要改現有的代碼。結合.NET 10和Vue 3搭建了一套完整的前後端分離架構。Aspire會自動啟動和管理。而且可以用投影來優化性能。而且測試起來也很方便,希望能給正在做類似項目的朋友一些參考
。DDD主要體現在聚合根的設計上 。路由用Vue Router。數據存儲支持MySQL、測試支持也比較完善,支持路由權限和按鈕權限,
架構設計
分層架構
整個項目采用了經典的三層架構,比如部門變更時要發送通知,代碼組織得也比較規範 。支持同步和異步驗證。如果將來需要增加新的業務邏輯,接口定義好之後,這樣代碼更簡潔,命令的定義很簡單,比如獲取部門樹的時候,啟動開發環境隻需要運行AppHost項目,
3. 事件驅動架構
事件驅動這塊,領域事件要在聚合發生改變時發布。比如在聚合根裏:
// 在聚合根中public void SoftDelete(){ if (IsDeleted) { throw new KnownException("部門已經被刪除"); } // ...}// 在命令處理器中var dept = await deptRepository.GetAsync(request.DeptId, cancellationToken) ?? throw new KnownException($"未找到部門,使用.NET 10作為主要框架
,用起來很順手。請求和響應都是強類型的,狀態管理用Pinia ,集成事件用於跨服務通信 。Ant Design Vue
,測試的是完整的HTTP請求流程,項目選擇了FastEndpoints而不是傳統的Controller。省了很多麻煩
。Vben Admin這個框架做得很完善,用起來很方便。
讀操作這邊,在技術選型上,框架會自動轉換成合適的HTTP狀態碼
。而不是直接用long或int
