读书人

操作日志设计-续

发布时间: 2012-12-26 14:39:29 作者: rapoo

操作日志设计--续

通了解《系统操作日志设计》,已基本明确我们不能通过clone的方式来做日志的设计,因为这样不仅会造成的你数据库表爆炸的情况,还大大的增加了工作量,减少了系统的可维护性。

????? 通过思考大概清楚系统操作日志的设计,以下是其UML图:

操作日志设计-续

?

通过上图,我们可以了解知道该UML主要由三个表组成,其中一个主表LogSetting和两个从表分别是LogOperation和LogSettingDetail。

那么怎么样才能通过这样的设计来现实我们的日志功能呢?

其实一开始我就觉得通过.net的反射功能可以很简单、很方便的实现这个功能,所以我就顺着一个思路来实现她;通过反射动态的获取Model实体的属性,然后再根据LogSettingDetail配置来匹配所要记录的字段信息。

?

先来主要的代码吧,发现将思想用文字表达出来还是较困难的,代码比较直接:

使用的场景

Model文件:

string Name{get;set;}…}
下面介绍如何将系统操作日志集成到你的业务系统中
添加操作:
EmployeeBll bll = new EmployeeBll();
EmployeeModel model = new EmployeeModel();
/* model 实体经过漫长的 赋值 后… */
bll.Add(model);    //添加实体
//添加系统操作记录
//日志LogManager<EmployeeModel> log = new LogManager<EmployeeModel>();
log.Add(model);
?
更新操作:
EmployeeBll bll = new EmployeeBll();
EmployeeModel model = bll.GetModel(employeeID);
LogManager<EmployeeModel> log = new LogManager<EmployeeModel>();
EmployeeModel modelOld = log.Clone(model);   //克隆EmployeeModel实体对象,这个主要是在系统操作日志记录时使用的
?
/* model 实体又经过漫长的 赋值 后… */
bll.Update(model);     //更新实体
//将更新的内容写入系统操作日志中
log.Compare(modelOld, model);    //原来的实体和赋值后的实体对比,并将更新的内容写入系统操作日志中
?
删除操作:
在GridView的RowDeleting事件中获取要删除的实体
EmployeeBll bll = new EmployeeBll();
EmployeeModel model = bll.GetModel(employeeID);
bll.Delete(employeeID);
LogManager<EmployeeModel> log = new LogManager<EmployeeModel>();log.Delete(model);       //实体的内容记录到日志中
?

?

总结:

大家可以看到代码还是比较粗糙的,有不少的重复的代码,下一节将会讨论如何进行系统操作日志管理

另外如何大家有什么意见或想法请分享提出。

?

本节用到的知识点

1、泛型

2、反射

3、缓存

?

优点:

1、使用和集成方便,代码量小;

2、大大提高工作效率,避免表爆炸;

?

读书人网 >编程

热点推荐