事件驱动架构模式【其他模式】

事件驱动架构模式

public class EventDriven {
    /**
     * 事件驱动架构模式:
     * Send and notify state changes of your objects to other applications
     * using an Event-driven Architecture.
     * 使用事件驱动的架构来发送通知【此对象状态的变更】给应用程序中的其他组件,解耦了事件源和事件处理器。
     */
    @Test
    public void all() {
        final EventDispatcher eventDispatcher = EventDispatcherImpl.builder().build();
        eventDispatcher.register(UserCreateEvent.class, new UserCreateHandler());
        eventDispatcher.dispacher(UserCreateEvent.of(User.of(Long.valueOf(1), "zxd")));
    }
}

/**
 * 1)事件抽象
 */
interface Event {
    Class<? extends Event> type();
}

abstract class BaseEvent implements Event {
    @Override
    public Class<? extends Event> type() {
        return getClass();
    }
}

/**
 * 2)事件处理器抽象
 */
interface EventHandler<T extends Event> {
    void handle(T event);
}

/**
 * 3)事件调度器抽象
 */
interface EventDispatcher {
    <E extends Event> void register(Class<? extends Event> type, EventHandler<E> hanlder);

    <E extends Event> void dispacher(E event);
}

/**
 * 4)事件调度器实现
 */
@Slf4j
@Builder
class EventDispatcherImpl implements EventDispatcher {
    @Default
    private final ConcurrentMap<Class<? extends Event>, EventHandler<? extends Event>> HANDLERS = new ConcurrentHashMap<>();

    @Override
    public <E extends Event> void register(Class<? extends Event> type, EventHandler<E> hanlder) {
        HANDLERS.putIfAbsent(type, hanlder);
    }

    @Override
    public <E extends Event> void dispacher(E event) {
        final EventHandler<E> handler = (EventHandler<E>) HANDLERS.get(event.getClass());
        if (handler != null) {
            handler.handle(event);
        } else {
            log.error("no handler for event {}", event);
        }
    }
}

@Value(staticConstructor = "of")
class User {
    private Long id;
    private String name;
}

/**
 * 5)具体的事件
 */
@Value(staticConstructor = "of")
class UserCreateEvent extends BaseEvent {
    private User user;
}

/**
 * 6)具体的事件处理器
 */
@Slf4j
class UserCreateHandler implements EventHandler<UserCreateEvent> {
    @Override
    public void handle(UserCreateEvent event) {
        log.info("id:{} name:{}", event.getUser().getId(), event.getUser().getName());
    }
}

原文地址:https://www.cnblogs.com/zhuxudong/p/10223535.html

时间: 2024-10-13 21:11:46

事件驱动架构模式【其他模式】的相关文章

针对架构设计的几个痛点,我总结出的架构原则和模式

一.分层架构 分层架构是最常见的架构,也被称为n层架构.多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师.开发者和软件设计者所熟知. 分层架构中的层次和组件是水平方向的分层,每层扮演应用程序中特定的角色.根据需求和软件复杂度,我们可以设计N层,但大多数应用程序使用3-4层.有太多层的设计会很糟糕,将导致复杂度的上升,因为我们必须维护每一层.在传统的分层架构中,分层包括表现层.业务或者服务层,以及数据访问层. 表现层负责应用程序的用户交互和用户体验(

[转]大型 JavaScript 应用架构中的模式

目录 1.我是谁,以及我为什么写这个主题 2.可以用140个字概述这篇文章吗? 3.究竟什么是“大型”JavaScript应用程序? 4.让我们回顾一下当前的架构 5.想得长远一些 6.头脑风暴 7.架构提议 7.1 模块化理论 7.2 CommonJS模块 7.3 外观模式 7.4 中介者模式 7.5 应用外观 7.6 核心的抽象 7.7 整合 7.8 超越发布/订阅:自动注册事件 7.9 常见问题 13 August 2013 原文:Patterns For Large-Scale Java

Atitit.&#160;数据约束&#160;校验&#160;原理理论与&#160;架构设计&#160;理念模式java&#160;php&#160;c#.net&#160;js&#160;javascript&#160;mysql&#160;oracle

Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle 1. 主键1 2. uniq  index2 3. 检查约束 (Check Counstraint) 对该列数据的范围.格式的限制(如:年龄.性别等)2 4. 默认约束 (Default Counstraint) 该数据的默认值2 5. trigger2 6. 外键机制  参照完整性:2 7. 断言约束:不必与特定的列绑定,可以理解为能应用于多个表的

(转)浅析三层架构与MVC模式的区别

MVC模式介绍: MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法,这个方法的假设前提是如果业务逻辑被聚集到一个部件里面,而且界面和用户围绕数据的交互能被改进和个性化定制而不需要重新编写业务逻辑MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. MVC是表现层的架构,MVC的Model实际上是View Mod

三层架构和MVC模式

1.三层架构 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦合"的思想. 1.表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得. 2.业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理. 3.数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添.删除.修改.更新.

SOA EDA 事件驱动架构 (Event-Driven Architecture,EDA) 简介

事件驱动架构 (Event-Driven Architecture,EDA) 简介 可以从两个方面来理解 EDA: EDA 是一种侧重于以生成/消费为基础的异步通信的架构模式.这主要对照于传统的基于线程的同步系统. EDA 是一种以事件 (event)为核心,提供事件产生,路由,消费已经结果回调等机制的架构模式. 简单地说, 面向服务架构 (Service-Oriented Architecture, SOA) 是一种 IT 架构策略,其基于面向服务的概念之上.自从 2002 开始为大家熟知以来

事件驱动架构(1)——《面向SOA的事件驱动架构设计与实现》阅读笔记

事件驱动架构基础元素: 1. 事件生产者(Event Producer) 2. 事件监听者(Event Listener) 3. 事件(Event):状态(State)变换产生事件. 4. 事件处理器(Event Processor) 5.事件反应器(Event Reaction) 6. 消息传递骨干(Messaging backbone) 7.消息流(Message Flow) 事件驱动架构类型: 1. 显式事件驱动.监听器登记在事件生产者端(类似监听模式).有存在耦合的缺点). 2. 隐式事

CQRS(命令查询职责分离)和 EDA(事件驱动架构)

转载CQRS(命令查询职责分离)和 EDA(事件驱动架构) 上一篇:<IDDD 实现领域驱动设计-SOA.REST 和六边形架构> 阅读目录: CQRS-命令查询职责分离 EDA-事件驱动架构 Domin Event-领域事件 Long-Running Process(Saga)-长时处理过程 Event Sourcing-事件溯源 CQRS Journey-微软示例项目 ENode-netfocus 实践项目 存在即是理由,每一种架构的产生都会有一种特定的场景,或者解决某一种实际应用问题,经

软件架构设计学习总结(22):软件架构——分层架构、事件驱动架构、微内核架构、微服务架构、基于空间的架构

分层架构 (Layered Architecture) 分层架构是最常见的架构,也被称为n层架构.多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师.开发者和软件设计者所熟知.比如MVC. 分层架构的一个特性就是 关注分离(separation of concerns) .在层中的组件只负责本层的逻辑.组件的划分很容易让它们实现自己的角色和职责,也比较容易地开发,测试管理和维护. 我们需要这样的冗余,即使业务层没有处理业务规则,也要通过业务层来调用数