From 30a4dbdba29b43a00af1cca1e51c0d097ab13a28 Mon Sep 17 00:00:00 2001 From: dudu Date: Tue, 2 May 2023 17:06:49 +0800 Subject: [PATCH 1/4] refactor: check null or empty domainEvents --- .../BaseRepository.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/BaseRepository.cs b/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/BaseRepository.cs index 31403d6..a30d9ad 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/BaseRepository.cs +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/BaseRepository.cs @@ -1,4 +1,4 @@ -using System.Linq.Expressions; +using System.Linq.Expressions; using Cnblogs.Architecture.Ddd.Domain.Abstractions; using MediatR; using Microsoft.EntityFrameworkCore; @@ -173,6 +173,12 @@ private async Task ExtraAndPublishDomainEventsAsync() var entities = Context.ExtractDomainEventSources(); var domainEvents = entities.SelectMany(x => x.DomainEvents!.OfType()).ToList(); entities.ForEach(x => x.ClearDomainEvents()); + + if (domainEvents is null || domainEvents.Any() == false) + { + return; + } + await BeforeDispatchDomainEventAsync(domainEvents, Context); await _mediator.DispatchDomainEventsAsync(domainEvents); } From afaba7357d7111cf2dfa4acbce7703dd6b77eab0 Mon Sep 17 00:00:00 2001 From: dudu Date: Tue, 2 May 2023 17:52:54 +0800 Subject: [PATCH 2/4] refactor: check null domainEvent --- .../DispatchDomainEventExtensions.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs b/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs index a03a5eb..21081d2 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs @@ -18,6 +18,11 @@ public static async Task DispatchDomainEventsAsync(this IMediator mediator, IEnu Exception? e = null; foreach (var domainEvent in events) { + if (domainEvent == null) + { + continue; + } + try { await mediator.Publish(domainEvent); From 6ec9b1145885ed0f2cb476d10becd7e201950823 Mon Sep 17 00:00:00 2001 From: dudu Date: Tue, 2 May 2023 20:29:23 +0800 Subject: [PATCH 3/4] refactor: check INotification type --- .../DispatchDomainEventExtensions.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs b/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs index 21081d2..9b4b2ca 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs @@ -16,7 +16,8 @@ public static class DispatchDomainEventExtensions public static async Task DispatchDomainEventsAsync(this IMediator mediator, IEnumerable events) { Exception? e = null; - foreach (var domainEvent in events) + + foreach (var domainEvent in events ?? Enumerable.Empty()) { if (domainEvent == null) { @@ -25,7 +26,14 @@ public static async Task DispatchDomainEventsAsync(this IMediator mediator, IEnu try { - await mediator.Publish(domainEvent); + if (domainEvent is INotification notification) + { + await mediator.Publish(notification); + } + else + { + await mediator.Publish(domainEvent); + } } catch (Exception exception) { From 4ada78a2ebe55a3e5b1b4bab40be8a6fdfb144b3 Mon Sep 17 00:00:00 2001 From: dudu Date: Tue, 2 May 2023 20:53:35 +0800 Subject: [PATCH 4/4] refactor: remove try...catch --- .../DispatchDomainEventExtensions.cs | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs b/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs index 9b4b2ca..c6de763 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs @@ -15,8 +15,6 @@ public static class DispatchDomainEventExtensions /// 要发布的领域事件。 public static async Task DispatchDomainEventsAsync(this IMediator mediator, IEnumerable events) { - Exception? e = null; - foreach (var domainEvent in events ?? Enumerable.Empty()) { if (domainEvent == null) @@ -24,26 +22,14 @@ public static async Task DispatchDomainEventsAsync(this IMediator mediator, IEnu continue; } - try + if (domainEvent is INotification notification) { - if (domainEvent is INotification notification) - { - await mediator.Publish(notification); - } - else - { - await mediator.Publish(domainEvent); - } + await mediator.Publish(notification); } - catch (Exception exception) + else { - e ??= exception; + await mediator.Publish(domainEvent); } } - - if (e is not null) - { - throw e; - } } } \ No newline at end of file