领域事件(Domain events)

本文探讨了C#中领域事件的概念及其在解耦和重用商业逻辑中的作用。通过事件总线机制,实现了类间的事件触发与监听,避免了直接依赖,提升了系统的灵活性与可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C#中,一个类可以定义其专属的事件并且其它类可以注册该事件并监听,当事件被触发时可以获得事件通知。这对于对于桌面应用程序或独立的Windows Service来说非常有用。但是, 对于Web应用程序来说会有点问题,因为对象是根据请求(request)被创建并且它们的生命周期都很短暂。我们很难注册其它类别的事件。同样地,直接注册其它类别的事件也造成了类之间的耦合性。

在应用系统中,领域事件被用于解耦并且重用(re-use)商业逻辑。

事件总线为一个单体(singleton)的对象,它由所有其它类所共享,可通过它触发和处理事件。要使用这个事件总线,你需要引用它。你可以用两种方式来实现:

定义事件

 public class TaskCompletedEventData : EventData {
      public int TaskId { get; set; }
   }

处理事件 

 public class ActivityWriter : IEventHandler<TaskCompletedEventData>, ITransientDependency {
      public void HandleEvent(TaskCompletedEventData eventData) {
         WriteActivity("A task is completed by id = " + eventData.TaskId);
      }
   }

注册取消事件 

//创建一个处理器
var handler = new ActivityWriter();
//注册一个事件
EventBus.Register<TaskCompletedEventData>(handler);
//取消这个事件的注册
EventBus.Unregister<TaskCompletedEventData>(handler);

 触发事件

public class TaskAppService : ApplicationService {
      public void CompleteTask(CompleteTaskInput input) {
         //TODO: 已完成数据库上的任务
         EventBus.Trigger(new TaskCompletedEventData { TaskId = 42 } );
      }
   }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值