IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 基于享元模式的数据库对象管理示例 -> 正文阅读

[系统运维]基于享元模式的数据库对象管理示例

基于享元模式的数据库对象管理示例

一、什么是享元

享元可以理解为共享元素,提倡的是一种资源共享的理念,以此来减少资源占用空间的情况。根据对象的共有特性进行区分并存放到容器中,从容器中取出对象访问。主要通过key-value的机制来存取对象,当key不存在时则创建一个对象,并存放入基于key-value机制的容器,然后取出使用;如果key已存在,则直接取出使用。

二、基于key-value管理数据库对象

此文以数据库对象为例,并非真实情景,仅作示例进行说明。
假如,系统中有业务、产品、客户管理,业务库按业务性质区分有多个数据库、产品库按分类区分有多个数据库、客户库按地区有多个数据库。
访问业务库数据库时,要用业务库的数据库对象进行访问;访问产品数据库时,要用产品库的数据库对象进行访问;同时访问客户数据库时,要用客户库的数据库对象进行访问。于是就有了三种数据库访问对象,分别是业务库数据库对象(DBB)、产品库数据库对象(DBP)、客户库数据库对象(DBC)。分三类数据库对象是由连接串的生成规则所决定,这就是各自的不同的地方,属于不享元的部分。
这些数据库对象由享元工厂进行管理,当我从享元工厂用关键"DBB"取数据库对象时,享元工厂会先检查key:"DBB"是否已存在,当没找到这个key时,就会先创建一个数据库对象存放入容器中,然后返回这个对象的实例;如果找到这个key,就直接返回这个对象的实例。
一般key-value的容器可以使用Hashtable、Dictionary<string, object>,或自己写一个。

三、类设计

在这里插入图片描述
DB:接口,声明了GetConnection方法,通过这个方法获取数据库对象实例;
DBB类、DBP类、DBC类:分别实现DB接口的GetConnection方法,各自的实现中根据不同的关键字生成不同的数据库连接串,并返回数据库对象实例;
DBFactory类:享元工厂,dict是一个Dictionary<string, DB>类型的容器,通过dict对象来存放继承DB接口的对象实例,并在GetDB方法中判断指定key是存在,不存在则先创建对象放入容器中,然后返回对象;已存在则直接返回对象。

public interface DB {
    SqlConnection GetConnection(string kw);        
}

public class DBB : DB {
    public DBB() { }
    public SqlConnection GetConnection(string kw) { 
        return new SqlConnection($"Server=.;Database=DBB_{kw}_B;uid=;pwd=;"); 
    }
}

public class DBP : DB {
    public DBP() { }
    public SqlConnection GetConnection(string kw) {
        return new SqlConnection($"Server=.;Database=DBP_{kw}_P;uid=;pwd=;");
    }
}

public class DBC : DB {
    public DBC() { }
    public SqlConnection GetConnection(string kw) {
        return new SqlConnection($"Server=.;Database=DBC_{kw}_C;uid=;pwd=;");
    }
}

public class DBFactory {
    private Dictionary<string, DB> dict;
        
    public DBFactory() {
        dict = new Dictionary<string, DB>();
    }
        
    public DB GetDB(string key) {
        if (!dict.ContainsKey(key)) {
            if (key.Equals("DBB"))
                dict.Add(key, new DBB());
            else if (key.Equals("DBP"))
                dict.Add(key, new DBP());
            else
                dict.Add(key, new DBC());
        }
        return dict[key];
    }
}
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:27:52  更:2022-01-08 14:29:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:52:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码