我在我的 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
连接到保存后信号。
因为我没有找到任何项目实施审计日志,所以我不确定它是否是一个好的模式。