OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构( 四 )


OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构

文章插图
OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构

文章插图
public class RequestPerformanceBehaviour<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse> where TRequest : IRequest<TResponse>{private readonly Stopwatch _timer;private readonly ILogger<TRequest> _logger;private readonly ICurrentUserService _currentUserService;private readonly ICurrentTenantService _currentTenantService;public RequestPerformanceBehaviour(ILogger<TRequest> logger, ICurrentUserService currentUserService, ICurrentTenantService currentTenantService){_timer = new Stopwatch();_logger = logger;_currentUserService = currentUserService;_currentTenantService = currentTenantService;}public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> next){_timer.Start();var response = await next();_timer.Stop();if (_timer.ElapsedMilliseconds > 500){var name = typeof(TRequest).Name;_logger.LogWarning("Request End: {Name} ({ElapsedMilliseconds} milliseconds) {@UserId} {@Request}",name, _timer.ElapsedMilliseconds, _currentUserService.UserId, request);}return response;}}12. 全局异常捕获记录基于MediatR 异常接口实现异常捕获 。
OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构

文章插图
OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构

文章插图
public class CommonExceptionHandler<TRequest, TResponse, TException> : IRequestExceptionHandler<TRequest, TResponse, TException>where TException : Exception where TRequest: IRequest<TResponse>{private readonly ILogger<CommonExceptionHandler<TRequest, TResponse,TException>> _logger;private readonly ICurrentUserService _currentUserService;private readonly ICurrentTenantService _currentTenantService;public CommonExceptionHandler(ILogger<CommonExceptionHandler<TRequest, TResponse, TException>> logger, ICurrentUserService currentUserService, ICurrentTenantService currentTenantService){this._logger = logger;_currentUserService = currentUserService;_currentTenantService = currentTenantService;}public Task Handle(TRequest request, TException exception, RequestExceptionHandlerState<TResponse> state, CancellationToken cancellationToken){var name = typeof(TRequest).Name;_logger.LogError(exception, $"Request Error: {name} {state} Tenant:{_currentTenantService.TenantId} User:{_currentUserService.UserId}", request);//state.SetHandled();return Task.CompletedTask;}}三、相关技术如下* .NET Core 7.0 RC1
* ASP.NET Core 7.0 RC1
* Entity Framework Core 7.0 RC1
* MediatR 10.0.1
* Npgsql.EntityFrameworkCore.PostgreSQL 7.0.0-rc.1
* Newtonsoft.Json 13.0.1
* Mapster 7.4.0-pre03
* FluentValidation.AspNetCore 11.2.2
* GRPC.Core 2.46.5
四、 找工作博主有10年以上的软件技术实施经验(Tech Leader) , 专注于软件架构设计、软件开发和构建,专注于微服务和云原生(K8s)架构,.Net Core\Java开发和Devops 。
【OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构】博主有10年以上的软件交付管理经验(Project Manager,Product Ower) , 专注于敏捷(Scrum)项目管理、软件产品业务分析和原型设计 。
博主能熟练配置和使用 Microsoft Azure 和Microsoft 365 云平台,获得相关微软认证和证书 。
我家在广州,也可以去深圳工作 。做架构和项目管理都可以,希望能从事稳定行业的业务数字化转型 。有工作机会推荐的朋友可以加我微信 15920128707,微信名字叫Jerry.

推荐阅读