基于领域模型准备审计事件

Posted

技术标签:

【中文标题】基于领域模型准备审计事件【英文标题】:Prepare audit events based on domain models 【发布时间】:2021-11-20 13:38:24 【问题描述】:

我有一个应用程序,它在没有自己的数据库的不同系统之间充当代理。应用程序涵盖的可能用例很少:

    显示来自特定系统的数据 将数据存储到特定系统或系统

实际上这个应用程序有自己的前端和后端(带有 sping boot 和 angular stack)。后端负责从外部系统获取/放入数据,前端与后端通信,它对外部系统一无所知。此外,后端遵循六边形架构,并有自己定义的领域模型。

目前有一些要求涵盖与应用程序相关的业务用例的审计。例如,如果用户访问与应用程序相关的某些功能并在那里进行一些更改,则应该对其进行审核。

我在互联网上搜索了这个主题,但我只找到了像 https://docs.spring.io/spring-data/jpa/docs/1.7.0.DATAJPA-580-SNAPSHOT/reference/html/auditing.html 这样的基于实体的审计。对于我的情况,我需要类似的东西,但基于域模型而不是实体。

您能否推荐一些方向来解决这个问题?实际上,对于这样的用例,可以使用哪个库来使用域模型的状态来准备审计事件。我找到了类似https://logging.apache.org/log4j-audit/latest/gettingStarted.html 的东西,但我真的不确定这是否正确

【问题讨论】:

【参考方案1】:

我想说您可以根据事件构建自己的审计策略。 让我们以您给出的示例为例:“如果用户访问与应用程序相关的某些功能并在那里进行一些更改,则应该对其进行审核。”。

我假设您有一个服务可以处理来自 REST API 或类似的请求的这些请求。同一个服务不仅会与外部系统通信,还会发布一个事件,比如关于用户的信息以及执行的更改或更新(例如,您可以依赖 Redis,但还有其他选项,例如 RabbitMQ 甚至Kafka,取决于您希望您的审计功能有多可靠)。

然后,您将让应用程序的另一个组件侦听这些事件,以便您可以将它们存储在数据库中(我想这就是目的)。或者,您甚至可以只为此目的使用单独的微服务,具体取决于该审计系统的复杂程度。

如果您想要更“神奇”和自动化的东西,您可以尝试查看 Spring Boot Data Audit 代码以了解它是如何实现的,但您最终可能会构建一个过度设计的解决方案。

【讨论】:

以上是关于基于领域模型准备审计事件的主要内容,如果未能解决你的问题,请参考以下文章

如何用事件风暴构建领域模型?

基于规则的安全事件关联分析模型

领域事件

领域驱动设计

基于事件驱动架构构建微服务第2部分:领域对象和业务规则

DDD专栏4:DDD如何保护领域模型