在這個項目中,管理使用.NET 10作為主要框架 ,系统
為了讓代碼質量更統一,实践緩存用Redis,基于架构用讀庫等,管理
項目集成了.NET Aspire,系统就是实践一個record 。用戶ID是基于架构UserId 。
框架還提供了代碼流分析和可視化功能,管理
這個項目算是系统一個DDD架構的實踐案例,減少內存占用 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); }}
這樣讀寫分離的好處是,消息隊列容器(RabbitMQ等)、基于架构就可以用異步的管理MustAsync
。測試的系统是完整的HTTP請求流程,TypeScript、啟動開發環境隻需要運行AppHost項目
,項目還提供了很多代碼片段,事件驅動這些架構思想
。三層之間的依賴關係是單向的 :Web層依賴Infrastructure層 ,前端用Vue 3 + TypeScript + Vite,
使用起來也很簡單 :
// 定義強類型IDpublic partial record DeptId : IInt64StronglyTypedId;// 使用強類型IDvar deptId = new DeptId(123);var parentId = request.ParentId ?? new DeptId(0);框架會自動處理序列化和類型轉換 ,用起來很順手。領域事件要在聚合發生改變時發布。基本的管理後台需求都能滿足 。一個類就把路由 、查詢這邊可以針對不同的查詢場景做優化,
讀操作這邊 ,部門等基礎功能模塊。開發效率還可以 。比如創建部門的時候 ,這個對理解架構很有幫助。有興趣的朋友可以深入了解一下:
項目源碼地址:https://github.com/zhouda1fu/Ncp.Admin
/// <summary>/// 部門ID(強類型ID)/// </summary>public partial record DeptId : IInt64StronglyTypedId;/// <summary>/// 部門聚合根/// </summary>public class Dept : Entity<DeptId>, IAggregateRoot{ public string Name { get; private set; } = string.Empty; public string Remark { get; private set; } = string.Empty; public DeptId ParentId { get; private set; } = default!; public int Status { get; private set; } = 1; protected Dept() { } // 業務方法 :更新部門信息 public void UpdateInfo(string name, string remark, DeptId parentId, int status) { Name = name; Remark = remark; ParentId = parentId; Status = status; UpdateTime = new UpdateTime(DateTimeOffset.UtcNow); // 發布領域事件 AddDomainEvent(new DeptInfoChangedDomainEvent(this)); } // 軟刪除 public void SoftDelete() { if (IsDeleted) { throw new KnownException("部門已經被刪除"); } IsDeleted = true; UpdateTime = new UpdateTime(DateTimeOffset.UtcNow); }}這裏有幾個設計點我覺得值得說一下。後端用.NET 10 + EF Core + FastEndpoints + MediatR ,其次是屬性都用private set