我目前正在开发的应用程序需要在另一个表中记录数据库所做的每一个更改:
例如:员工表有一个员工审核表。
我一直在考虑应该把审计功能放在哪里!按照DDD,有人能给我提供他们的建议和意见吗?
以下是我考虑到的选项:
1.当“存储库”调用保存更改时,我应该从存储库执行审计逻辑(将Repository负责持久化更改以及持久化审计细节是否是不良设计/实践?将服务从存储库内部调用(在这种情况下为IAuditService)是否是良好的实践)?
示例1:
例如:员工表有一个员工审核表。
我一直在考虑应该把审计功能放在哪里!按照DDD,有人能给我提供他们的建议和意见吗?
以下是我考虑到的选项:
1.当“存储库”调用保存更改时,我应该从存储库执行审计逻辑(将Repository负责持久化更改以及持久化审计细节是否是不良设计/实践?将服务从存储库内部调用(在这种情况下为IAuditService)是否是良好的实践)?
示例1:
public class EmployeeRepository : IRepository
{
DbContext _db;
IAuditService _auditService;
EmployeeRepository(IAuditService auditService)
{
_auditService = auditService
}
void Update(Employee empl)
{
// Update Employee with dbcontext entity framework
// Perform Audit using AuditService
}
void SaveChanges()
{
// Call save changes on dbcontext
}
}
- 我是否应该在我的应用服务中调用 IAuditService
例子2:
public class EmployeeService
{
IAuditService _auditService;
IUnitOfWork _unitOfWork;
IEmployeeRepository _repository;
EmployeeService(IAuditService auditService, IUnitOfWork unitOfWork, IEmployeeRepository repo)
{
_auditService = auditService;
_unitOfWork= unitOfWork;
_repo = repo;
}
void UpdateEmployee(int id, string name, int age)
{
// Get Employee
// Update Employee
// Audit Changes
// Commit Transaction
}
}