装饰者模式---使用装饰者模式实现带日志记录功能的数据库命令执行类

简介: 装饰者模式:"在不改变对象的前提下,动态增加其功能",不希望改变原有的类,或采用创建子类的方法增加功能.在修饰了一个对象后,其接口不应该发生变化,否则这个对象不能被原有调用者使用,修饰失去了意义,装饰者与被装饰者具有相同的接口  using System;using System.Data;namespace cxyDecorator...{    public abstract  c
装饰者模式:"在不改变对象的前提下,动态增加其功能",不希望改变原有的类,或采用创建子类的方法增加功能.
在修饰了一个对象后,其接口不应该发生变化,否则这个对象不能被原有调用者使用,修饰失去了意义,装饰者与被装饰者具有相同的接口
 
using  System;
using  System.Data;

namespace  cxyDecorator
... {
    
public abstract  class clsAbstractDb
    
...
        
public abstract string ConnectionString
        
...{
            
get;
            
set;
        }


        
public abstract void Open();
        
public  abstract void Close();
        
public abstract DataTable ExecSql(string strSql);
        
public abstract void ExecNonQuery(string strSql);

    }



    
public class SqlDb:clsAbstractDb
    
...{
        
private string m_constr;
        
public override  string ConnectionString
        
...{
            
get
            
...{
                
return m_constr;
            }

            
set
            
...{
                m_constr
=value;
            }

        }


        
public override void Open()
        
...{
            
//...
        }


        
public override void Close()
        
...{
            
//..
        }


        
public override DataTable ExecSql(string strSql)
        
...{
            
return new DataTable();
        }


        
public  override void ExecNonQuery(string strSql)
        
...{
            
//....
        }

    }



    
public class LogDb:clsAbstractDb
    
...{
        
private clsAbstractDb worker;
        
public LogDb(clsAbstractDb db)
        
...{
            worker
=db;
        }


        
"clsAbstractDb"#region "clsAbstractDb"  
        
public override string ConnectionString
        
...{
            
get
            
...{
                
return worker.ConnectionString;
            }

            
set
            
...{
                worker.ConnectionString
=value;
            }

        }

        
public override void Open()
        
...{            
            
//....
            worker.Open();
            Record(
"open");
        }


        
public override void Close()
        
...{
            
//....
            worker.Close();
            Record(
"close");
        }


        
public override DataTable ExecSql(string strSql)
        
...{
            DataTable dt
=new DataTable();
            dt
=worker.ExecSql(strSql);
            
//
            Record("get datatable");
            
return dt;
        }


        
public override void ExecNonQuery(string strSql)
        
...{
            
//....
            worker.ExecNonQuery(strSql);
            Record(
"strsql");
        }


        
#endregion


        
private void Record(string eventstr)
        
...{
            
//log it into somewhere;
        }
 

    }


    
public class DbFactory
    
...{
         
        
public static clsAbstractDb CreateDb(string dbtype)
        
...{
            clsAbstractDb test;
            test
=new SqlDb();
            
switch(dbtype)
            
...{
                
case "sql"
                    
break;

                    
//                case "oracle":
                    
//                    test=new oracleDb();
                    
                    
//.....
                     
            }

            
return test;
        }


        
public static clsAbstractDb CreateLogDb(string dbtype)
        
...{
            clsAbstractDb log;
            log
=new LogDb(CreateDb(dbtype));
            
return log;
        }

    }


}
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
29天前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
|
1月前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
29 0
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
51 0
|
1月前
|
SQL 关系型数据库 MySQL
|
1月前
|
存储 安全 算法
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
57 0
|
3天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
6 0
|
4天前
|
SQL XML 数据库
sql导入数据库命令
在SQL Server中,数据库导入可通过多种方式实现:1) 使用SSMS的“导入数据”向导从各种源(如Excel、CSV)导入;2) BULK INSERT语句适用于导入文本文件;3) bcp命令行工具进行批量数据交换;4) OPENROWSET函数直接从外部数据源(如Excel)插入数据。在操作前,请记得备份数据库,并可能需对数据进行预处理以符合SQL Server要求。注意不同方法可能依版本和配置而异。
|
10天前
|
SQL 数据库 HIVE
Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
【4月更文挑战第8天】Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
21 0
|
17天前
|
网络协议 应用服务中间件 Linux
centos7 Nginx Log日志统计分析 常用命令
centos7 Nginx Log日志统计分析 常用命令
33 2
|
1月前
|
SQL 存储 安全
【软件设计师备考 专题 】数据库管理系统的功能和特征
【软件设计师备考 专题 】数据库管理系统的功能和特征
73 0