Questions tagged «event»

10
单一责任原则的适用性
我最近遇到了一个看似微不足道的建筑问题。我的代码中有一个简单的存储库,其名称如下所示(代码在C#中): var user = /* create user somehow */; _userRepository.Add(user); /* do some other stuff*/ _userRepository.SaveChanges(); SaveChanges 是一个简单的包装程序,用于将更改提交到数据库: void SaveChanges() { _dataContext.SaveChanges(); _logger.Log("User DB updated: " + someImportantInfo); } 然后,过了一段时间,我需要实现新的逻辑,该逻辑每次在系统中创建用户时都会发送电子邮件通知。由于有许多来电_userRepository.Add()和SaveChanges系统的时候,我决定更新SaveChanges如下: void SaveChanges() { _dataContext.SaveChanges(); _logger.Log("User DB updated: " + someImportantInfo); foreach (var newUser in dataContext.GetAddedUsers()) { _eventService.RaiseEvent(new UserCreatedEvent(newUser )) } …

3
API网关(REST)+事件驱动的微服务
我有一堆微服务,这些服务根据API网关模式通过REST API公开。由于这些微服务是Spring Boot应用程序,因此我正在使用Spring AMQP来实现这些微服务之间的RPC风格的同步通信。到目前为止,一切进展顺利。但是,我对事件驱动的微服务体系结构了解得越多,对诸如Spring Cloud Stream之类的项目的了解越多,我就深信我可能会采用RPC同步方法以错误的方式进行操作(特别是因为我需要按比例缩放)以便每秒响应来自客户端应用程序的数百或数千个请求)。 我了解事件驱动架构背后的观点。我不太了解的是当坐在期望对每个请求都响应的模型(REST)后面时,如何实际使用这种模式。例如,如果我将我的API网关作为一个微服务,而另一个将存储和管理用户的微服务作为一个微服务,那么我该如何GET /users/1以纯粹的事件驱动方式对诸如a之类的事物进行建模呢?

3
DDD:将域事件处理程序放在哪里?
您能否告诉我您的观点,哪一层适合将域事件处理程序放置在DDD中?例如,我有应用程序服务来添加新合同,并且我想在合同添加后向联系人发送电子邮件通知,电子邮件发件人(处理ContractAdded事件)应用程序服务或域服务还是还有什么吗

2
如何确定消息是命令消息还是事件消息?
两种企业集成模式是命令消息和事件消息。我正在开发一个系统,在该系统中,我们不仅使用消息传递与其他系统集成,还使用服务之间的内部通信。它应该是一个最终一致的系统,并且服务应该彼此一无所知(几个特殊用途的服务除外)。因此,我们尽量避免感觉像是远程过程调用(RPC或RPI)。我们有一个面向总线和面向消息的中间件系统,并且所有消息都被广播。 我们倾向于将消息命名为事件,即过去完美的短语,例如PurchaseOrderShipped。但是,通常仅在某些其他服务需要了解事件时才添加事件,并且一开始通常只关心一个服务。而且,有时该服务会发出一个结果,该事件会被第一个服务侦听。因此,如果我要绘制交互关系图,则它看起来更像是上面链接中的命令消息图(甚至是RPC图),而不是事件消息图,尽管这实际上并没有实现直接消息传递,但在公交车上广播。另外,我最近看到有一些消息被添加为命令,即命令中的短语,例如BillShippedPurchaseOrder。 奇怪的是,消息的名称及其传递方式不会通过将其命名为事件还是命令而改变。那么,如何确定某个东西应该是命令消息还是事件?这仅仅是语义和命名的区别,还是命令和事件消息之间的实际实现区别?既然我们所有的消息都是广播的,那是否意味着没有一个是真正的命令消息?

2
事件的发送者是否应该始终是通用对象?
使用C#编写事件时,建议以以下形式创建委托: delegate XEventHandler(object sender, XEventArgs e); 我的问题是关于代表的第一个论点object sender。一定要一定要通用object吗?具有类型的发送方object总是会导致与此类似的代码。 val = ((ConcreteType)sender).Property; 或者,甚至更冗长, ConcreteType obj = sender as ConcreteType if (obj != null) { ... } 反对强类型发送者的一种说法是,其他对象可以转发事件而不必担心类型。尽管这在GUI环境中可能有意义,但是我不确定它是否可以在GUI之外受益。 如果始终知道发送方的类(至少是抽象类)怎么办?例如,如果我实现ListChanged的一个抽象事件List类,而如果其他类要继承它(例如LinkedList,ArrayList),是这一切的权利界定与类型的发件人我的委托List? delegate ListChangedEventHander(List sender, ListChangedEventArgs e); 还是将常规object sender类型更改为更特定的类型会有不利影响?
10 c#  event 

2
是否应该将事件侦听器设置为弱引用?
通常,事件侦听器不应超出注册它们的对象的寿命。 这是否意味着事件侦听器默认情况下应由弱引用持有(由对象侦听器存储在弱集合中进行注册)? 是否存在有效的情况,使听众的生命力超越其创造者? 又或者像这样的情况是一个错误,不应允许?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.