采用事件溯源重构支付功能

事件溯源是什么

        事件溯源是以时间顺序记录所发生的领域事件,之后可通过所记录的领域事件得到相应对象当前状态的一种设计理念。这种设计理念从根本上颠覆了以更新方式维护对象状态的传统方式,其优点是保存了聚合(如果还没听说过这个概念,可以先了解下DDD)的操作历史,从而为审计和数据分析提供支持;对于事件只进行插入,也就无需锁和事务,因此性能更好。缺点是数据量会更大;需要重放所有相关事件来得到当前状态;有违大多数开发人员的习惯思维方式。

为什么用事件溯源

        在为新类型单据开发支付功能的过程中发现了原支付功能中诸多不合理设计和缺陷,比如表结构(不参与查询的属性定义为表中的列,也就是可以保存为json的数据以结构化方式保存),代码不能应对并发。

        原支付功能由payment表负责保存单据的支付状态,每次支付操作的请求数据和回调数据都保存在与payment表结构完全一样的payment_history表中,两个表的唯一的区别是payment_history表的单据编号字段保存的是单据编号 + 支付次数,像这样:0001-1,0001-2。当执行任何与支付有关的操作(支付,拒绝,退款)或接收到支付接口的回调后须同时更新payment和paymeny_history两个表。

        支付功能对于任何系统的重要性都不言而喻,因此当初的设计者才会将有关支付的所有操作都记录在paymeny_history这个相当于支付日志的支付历史表中。事件溯源就是为类似这种需要完整保存历史轨迹的需求而量身打造的,但其实这并不是事件溯源的目的,而只是该设计理念所附带的好处。这就是为什么选择以事件溯源来重构支付功能的唯一原因。

如何以事件溯源进行重构

        事件溯源的核心是事件,没有事件何以溯源。所以,首先要做的就是从支付流程中识别并提取出所有领域事件。根据本系统支付业务的特点,提取出如下事件:支付数据验证通过,支付数据验证未通过,支付成功,支付失败,退款,拒绝支付。事件对象中属性的定义取决于系统的特点,并没有通用的标准,不过至少要包含事件名和时间两个核心属性。以下是本系统支付领域事件的定义。

    public static class StartPay extends Event {
        public StartPay(Long billId) {
            super(billId, StartPay.class, "开始支付");
        }
    }

    public static class Verified extends Event {
        public Verified(Long billId, String data) {
            super(billId, Verified.class, data);
        }
    }

    public
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
污染溯源系统的功能模块可以包括以下几个方面: 1. 数据采与监测:系统通过传感器、监测设备等手段实时采集污染源排放数据,如废水排放量、废气成分、固体废物产生量等。 2. 数据存储与管理:系统提供数据存储与管理功能,将采集到的污染源数据进行整理、分类和存储,以便后续的处理和分析。 3. 污染源溯源:系统可以对污染源进行溯源分析,通过污染源的特征数据和历史记录,确定污染源的来源和可能的责任方。 4. 数据分析与处理:系统对采集到的污染源数据进行分析和处理,例如利用统计方法、数据挖掘等技术手段,发现污染源之间的关联性和影响因素。 5. 污染源定位与追踪:系统可以根据分析结果对污染源进行定位和追踪,通过地理信息系统(GIS)等技术手段将污染源的位置信息与污染数据进行关联,以便监管部门进行调查和处置。 6. 预警与报告生成:系统基于实时监测数据和分析结果生成污染源的预警信息,并生成相应的报告,及时提醒相关部门采取措施应对潜在的污染风险。 7. 数据可视化与展示:系统通过图表、报表、地图等方式将污染源数据进行可视化展示,方便用户直观地了解污染源的分布情况和变化趋势。 通过以上功能模块的组合,污染溯源系统能够实现对污染源的监测、分析和管理,有助于及时发现和追溯污染源,以便采取相应的控制和治理措施,保护环境和人民健康。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值