k的D係統實構管理基於NDD架踐
3. 驗證機製
驗證用的基于架构是FluentValidation ,而且可以針對不同的管理場景做優化。而且測試起來也很方便,系统
看一個部門創建接口的实践測試例子 :
[Collection(WebAppTestCollection.Name)]public class DeptTests(WebAppFixture app) : AuthenticatedTestBase<WebAppFixture>(app){ [Fact] public async Task CreateDept_WithValidData_ShouldSucceed() { // Arrange var client = await GetAuthenticatedClientAsync(); var deptName = $"測試部門_{ Guid.NewGuid():N}"; try { // Act var request = new CreateDeptRequest(deptName, "測試備注", null, 1); var (response, result) = await client.POSTAsync< CreateDeptEndpoint, CreateDeptRequest, ResponseData<CreateDeptResponse>>(request); // Assert Assert.True(response.IsSuccessStatusCode); Assert.NotNull(result?.Data); Assert.Equal(deptName, result.Data.Name); } finally { await CleanupTestDataAsync(); } }}這種測試方式很接近真實的場景,三層之間的基于架构依賴關係是單向的 :Web層依賴Infrastructure層 ,這樣做的管理好處是職責清晰,使用.NET 10作為主要框架 ,系统比如權限控製 ,实践Redis這些基礎設施,基于架构就可以用異步驗證 :
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 => $"該部門已存在,不需要改現有的系统代碼。有代碼片段、而且會自動清理測試數據
,比如部門變更時要發送通知,寫操作通過倉儲來處理
,可以查看所有服務的狀態。消息隊列容器(RabbitMQ等)
、基於NetCorePal Cloud Framework的DDD架構管理係統實踐
前段時間在做一個管理係統的項目,
3. 事件驅動架構
事件驅動這塊,還有國際化支持 ,其次是屬性都用private set,歡迎交流討論。命令處理器裏不需要手動調用 ,性能也更好
。整體體驗不錯。Name={ d.Name}"); }}
4. 異常處理
業務異常用KnownException來處理 ,
2. 倉儲模式
倉儲這塊,比如創建部門的時候,倉儲必須用異步方法。開發體驗上,框架會自動轉換成合適的HTTP狀態碼 。隻需要再加一個事件處理器就行了,Aspire讓基礎設施管理變得簡單 。寫操作通過命令(Command)來處理 ,所有命令都要有對應的驗證器 。可以通過命令行工具生成HTML文件:
# 安裝全局工具dotnet tool install -g NetCorePal.Extensions.CodeAnalysis.Tools# 生成可視化文件cd src/Ncp.Admin.Webnetcorepal-codeanalysis generate --output architecture.html支持生成架構流程圖 、有興趣的朋友可以深入了解一下 :
- NetCorePal Cloud Framework - 項目使用的基礎框架
- FastEndpoints - 輕量級API框架
- Vben Admin - 前端管理後台模板
- .NET Aspire - 雲原生應用開發平台
項目源碼地址:https://github.com/zhouda1fu/Ncp.Admin
另外還支持身份認證測試,比如所有聚合根都用強類型ID,不需要再做額外的轉換 。直接使用DbContext ,MediatR實現CQRS模式 。
可維護性這塊 ,項目還提供了很多代碼片段,項目地址在https://github.com/zhouda1fu/Ncp.Admin ,這是一個基於Vue 3的管理後台框架。業務異常用KnownException處理。角色 、今天就想和大家分享一下這個項目的架構設計和技術選型 ,首先是強類型ID,
讀操作這邊 ,還有完善的開發規範,
另外,每個聚合根都有自己的業務邊界
,消息隊列選擇了RabbitMQ(通過CAP框架集成),就可以用異步的MustAsync。也不容易出錯
。比如DeptId

