使用信号创建审计日志是好的做法吗

问题描述 投票:0回答:0

我在我的 Python 项目中实现了存储库模式。现在我想实现审计日志来保存操作历史记录。在我看来,在存储库模块方法中创建审计日志违反了单一职责原则,如下所示。

这是我的基本模型和存储库模块。

class User is
   username is string
   password is string
   role is Role model


class AuditLog is
    model_object is Generic reference(polymorphic reference) field
    data is JSON field
       example:
       {
         "username": {"new": "john_doe", "old": "jane_doe"}
       }
    actor is User
    created_at is datetime
    


class UserRepository is
    method update(...) is
        # update the user object
        # create an audit log object and save it to DB

相反,我正在考虑通过信号(事件驱动)处理更新方法参数并在接收者的函数中创建审计日志

class UserRepository is
    method update(...) is
      # update the user object

定义用于执行通用逻辑的基本更改处理程序

class BaseChangesHandler is
   # Generic logic goes here 

在每个模型更改处理程序中覆盖或定义新方法

class UserChangesHandler(BaseChangesHandler) is

   method create_audit_log(...) is
       # create an audit log here

UserChangesHandler.create_audit_log
连接到保存后信号。

因为我没有找到任何项目实施审计日志,所以我不确定它是否是一个好的模式。

architecture signals software-design event-driven event-driven-design
© www.soinside.com 2019 - 2024. All rights reserved.