对数据操作封装的一点心得

SQLAlchemy学习的一点心得 SQLAlchemy 是 Python SQL 工具包和对象关系映射器,为应用程序开发人员提供 SQL 的全部功能和灵活性。SQLAlchemy支持SQLite、PostgreSQL、Oracle、MySQL、MariaDB、Microsoft SQL Server等多种数据库。 阅读详情

假设缓存中数据的格式如下所示:

 

id | name level exp time

 

下面,我们考虑对数据操作进行封装,先定义一个类

 

class CCacheData;

 

在对数据进行操作时,可能需要读写name,于是我们写了一个接口,这个接口会实时更新缓存

 

class CCacheData

{

    SetName(string &name);

};

 

由于业务需要,我们需要一个接口更新exp,于是又多了一个接口 

 

class CCacheData

{

    SetName(string &name);

    SetExp(int exp);

};

 

由于业务需要,我们需要一个接口更新exp的同时,更新time,于是又多了一个接口

 

class CCacheData

{

    SetName(string &name);

    SetExp(int exp);

    SetExp(int exp, int time);

}; 

 

由于业务需要,我们需要一个接口更新level,于是又多了一个接口

 

class CCacheData

{

    SetName(string &name);

    SetExp(int exp);

    SetExp(int exp, int time);

    SetLevel(int level);

}; 

 

由于业务需要,我们需要一个接口更新level的同时,更新time,于是又多了一个接口

 

class CCacheData

{

    SetName(string &name);

    SetExp(int exp);

    SetExp(int exp, int time);

    SetLevel(int level);

    SetLevel(int level, int time);

}; 

 

由于业务需要,我们需要一个接口 ...

 

........

 

上面的方式,有几个弊端:

 

1.接口会随着业务不断增加

2.每次更新都会更新数据源,开销比较大,如果业务需要多次更新时,不能保证原子操作

 

于是,我们想了一个办法,用一个结构体把数据封装起来,然后定义读写接口,如下所示:

 

class CCacheData

{

    struct stData{

         int id;

         string name;

         int exp;

         int level;

         int time;

    };

 

    Get(stData &data);

    Set(stData &data);

}; 

 

上面的方式业务简单而且清晰,也解决了第一种封装方式的问题,但存在安全性的问题。

比如,一个调用者,可能在业务逻辑中多次调用,在外部多次修改结构体,很有可能会不小心修改了不应该改的字段,如不小心赋了下初值等,这样set的时候会直接回写,数据就会出错。

 

于是我们想到一种更好的方式,暴露给调用者的只有接口,而数据结构本身做为一个成员变量保存在类中,如下所示:

 

class CCacheData

{

    struct stData{

         int id;

         string name;

         int exp;

         int level;

         int time;

    };

 

public: 

    Query(int id);

    Commit();

 

    SetName(string &name);

    string GetName();

 

    SetExp(int exp);

    int GetExp();

 

    SetLevel(int level);

    int GetLevel();

 

    SetTime(int time);

    int GetTime();

 

private:

    stData m_data;

}; 

 

这样,每次调用时先Query,把数据读出,并给m_data赋值,然后,可以多次调用get和set接口,如果有set过的话,最后只要调用commit接口,就可提交,这种方式有几个优点:

1.保证了原子性,无论是读或写几个字段,都只要两次操作即可完成

2.保证了类成员数据安全,封装等级比较高

3.数据结构调整时(比如添加一个flag字段),由于暴露给上层的只是接口,所以调用者代码无需修改

 

 

总结:

 

对缓存或数据库数据操作进行封装时,一定要注意原子性、通用性和可扩展性,最好给上层提供统一的接口类或实现,这样,才能保证代码不会随业务复杂性增加而快速暴涨,同时也能保证代码的清晰与易用性。

上面的封装采用了Facade模式,其实设计模式在编码中处处可以体现,这也对我们开发人员提出更高的要求,如果能合理、适度的使用设计模式,使自己的代码更简洁、更优美。

 

 

springmvc中redis数据操作封装(RedisTemplate) springmvc中redis数据操作封装(RedisTemplate)简单直接上代码使用的工具以及调用库备注 简单直接上代码 package com.graduation.common; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import 阅读详情

相关推荐

深入掌握JDBC数据操作封装技术

在本章节中,我们深入探讨了如何通过JDBC实现DAO层的设计,并且具体实现了增删查改四大接口。我们不仅了解了DAO层在应用架构中的位置,也掌握了实现增删查改操作的具体代码。此外,事务管理的介绍确保了我们能够理解并处理数据的一致性和完整性。在下一章中,我们将继续深入,探讨JDBC中的事务处理方法。在本章节中,我们学习了使用JDBC进行结果集到对象集合的转换方法。首先,介绍了基础操作方法,包括单个对象和多个对象的转换。

weixin_35728286的博客 358

数据库访问技术的总结 一

本文打算对数据库的访问技术,做一个完整的梳理,已被后来需要时查阅。 一、嵌入式SQL的处理过程 将书写的SQL语句嵌入到主语言中,主语言一般如c、c++、java等。对于这种嵌入式语言(ESQL),RDBMS的处理方式是采用预编译的方式,RDBMS的预处理程序对主程序的代码进行扫描,识别出其中的SQL语句,把它们转换成主语言调用语句,以使主语言调用语句的编译程序能够识别他们,然后主语言程序将纯...

feiyuezouni的博客 9076

ROS-Industrial :simple_message

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录1. 概述2. 协议(Protocol)3. HEADER解析3.1 MSG_TYPE3.2 COMM_TYPE3.3 REPLY CODE 1. 概述 Simple_Message是ROS-Industrial的一部分,定义了用于与工业机器人控制器通信的简单消息连接协议。另外还包括处理连接受限系统的处理器和管理器类。 2. 协议(Protocol) 简单消息(simplemessage)协议定义了ROS的驱动层和机器人控制器之.

flsxyw的博客 780

WireShark数据包分析数据封装

WireShark数据包分析数据封装

大学霸__IT达人 4082

Light Tools 8.4 在 win10系统上的安装方法(64位)

** 总的来说安装LT需要以下步骤(折腾了三天终于装好): 安装LT软件–禁用签名–加载含数字签名的第三方inf–添加注册表/安装驱动/添加密钥–成功破解 一、下载对应的LightTools 8.4版本软件,如下图为解压后的文件: 并选择 进行默认安装。 二、禁用数字签名。这里我用了两种方法,一种不行就换另一种,最终成功禁用。 方法1: 1、输入“cmd”并以管理员身份运行; 2、输入或复制 bcdedit.exe /set nointegritychecks on (此命令若没成功,再试bcded

weixin_45560953的博客 1万+

INCA刷写App文件必看:A2l文件配置与ProF文件安装详解(2023最新版)

本文深入解析了使用INCA进行ECU应用程序刷写时,A2l文件配置与ProF文件安装的关键细节与避坑指南。重点阐述了A2l文件必须与待刷写二进制文件严格匹配的核心逻辑,以及ProF文件与Bootloader版本强相关的安装策略,帮助开发者解决刷写过程中的常见失败问题,确保刷写流程的稳定与可靠。

milk8的博客 591

数据的封装性及其可以进行操作的限制问题

数据的封装性及其可以进行操作的限制问题 面向对象程序设计的最大特点就是实现了数据的封装,对数据的操作是受一定的限制的,那么,C++中是如何实现这些限制呢? (数据的封装性,通过一些手段(限制)哪些数据量允许什么对其操作)   1.变量的作用域方法实现一种限制 一个变量的变量作用域:是从定义处开始(申请空间,用于存放数值),到遇到的 第一个“}”,该变量被释放空间。从定义处开始,到

蜗牛的远航 1855

拆开华为BBU5900,看看5G基站的大脑里到底装了啥?

本文深度拆解华为BBU5900,揭示5G基站核心处理单元的硬件架构与设计哲学。通过详细解析模块化设计、智能电源系统和动态散热方案,展现其支撑千兆速率、毫秒级时延的技术奥秘,为5G网络部署提供实用参考。

weixin_31456563的博客 562

在参数封装对象Page中使用in查询多项数据记录

项目简介:SSM架构,后台将所有请求参数封装到Page对象中,直接传到底层,在mybatis的mapper.Xml文件中做分类处理。 问题描述:客户提出需求,在数据筛选条件中多个数据项支持多选操作,多选操作本身不难,但是导致查询异常。 传参数据结构: { teamid=”“, yf=08, bjDate=”“, jjbh=”“, sor

fangdengfu123的博客 872

别再为STM32F407的USB高速通信发愁了!手把手教你用USB3320(ULPI接口)搞定硬件设计

本文详细介绍了STM32F407通过USB3320(ULPI接口)实现高速USB通信的硬件设计实战。从USB3320的选型优势到原理图设计避坑,再到PCB布局和固件配置,提供了一套完整的解决方案。特别针对USB PHY芯片的常见问题,如供电处理、信号完整性和初始化代码,给出了专业建议和调试技巧,帮助工程师高效完成高速USB通信设计。

weixin_42527401的博客 387

AI数字人短视频数字人口播数字人分身建模流程全解析

在人工智能与计算机图形学蓬勃发展的当下,数字人建模作为打造虚拟数字人的核心环节,其流程复杂且精妙,融合了多种前沿技术与创意构思,为栩栩如生的数字人形象奠定基石。​。

2403_87518095的博客 1447

gorm数据操作封装

为了方便管理数据库连接的配置参数,定义一个结构体如下:go代码解读复制代码其中,DSN是数据库连接字符串(包含用户名、密码、主机地址、端口、数据库名等信息),LogMode用于控制是否开启 Gorm 的日志记录模式,用于决定是否在启动时自动迁移表结构(如果表不存在则创建,存在则更新结构以匹配定义的结构体)。假设数据库中有一个用户表,定义对应的结构体如下:go代码解读复制代码。

2401_89221867的博客 808

Transformers在自动驾驶领域的应用(High-level like in scene)

Transformers uses global attention mechanism to capture long-range interaction information. Two core modules in Transformers are Self-Attention and Cross-Attention, which defined asAttn(Q,K,V)=softmax(QK⊤dk)VSelfAttn(X)=Attn(WQX,WKX,WVX)CrossAttn(X,Y)=Attn

qq_39337332的博客 1775

用JDBC完成数据操作层的封装,连接MySQL

案例需求: 用JDBC完成数据操作层的封装,具体要求如下: 1)封装数据库连接 2)把数据库的增删改查封装成方法 3)完成一个基于自己实现方法的数据库带参数查询实例,要求查询参数不得少于3个,同时返回类型必须为一个具体的对象类型 4)查询所有信息,封装返回具体列表对象 5)自己建立数据库 6)图片信息的直接保存和读取。 根据以上要求,设计一个学生管理系统的数据库操作层StudentDao,系统可以有学生表student。 使用1.完成的StudentDao,完成学生管理系统的增、删、改、查的场景。

weixin_622464的博客 1876

WordPress MasterStudy LMS插件 SQL注入漏洞复现(CVE-2024-1512)

WordPress Plugin MasterStudy LMS 3.2.5 版本及之前版本存在安全漏洞,该漏洞源于对用户提供的参数转义不足,导致可以通过 /lms/stm-lms/order/items REST 路由的 user 参数进行基于联合的 SQL 注入。

0xSec 1437

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NHibernate中数据操作封装类定义

NHibernate中数据操作封装类定义

hsg77的专栏 1905

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Python3 sqlite3数据操作简易封装

# -*- coding:utf8 -*- import sqlite3 ''' sqlite3数据操作简易封装 ''' class DBHP(): def __init__(self,db_name=None): self.conn = sqlite3.connect(db_name if db_name else 'CattleSpider.db') self.cursor = self.conn.cursor() print("初始化打开数.

全国10大躺平艺术家之一,世界10大懒人之二,宇宙百百万亿尘埃之一 8624

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

redis数据操作封装(RedisTemplate)可存取对象

以下是redis数据的操作封装 大概为(redsi对数据的增删查)几乎封装的大部分的方法 只有一小部分的方法没有写进来 序列化方法SerializeUtil请去这里拿(https://mp.youkuaiyun.com/postedit/88244655) package com.graduation.common; import java.util.Collection; import java.u...

qq_39897814的博客 4922

Python:MySQL数据操作类封装

#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: 617349013@qq.com @software: PyCharm @file: dbSql.py @time: 2018/9/22 17:47 """ import pymysql import logging impo...

caoxinjian423的博客 4233

python将脚本封装成类_Python数据操作方法封装类实例

本文实例讲述了Python数据操作方法封装类。分享给大家供大家参考,具体如下:工作中经常会用到数据的插叙、单条数据插入和批量数据插入,以下是本人封装的一个类,推荐给各位:#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:Eric.yueimport loggingimport MySQLdbclass _MySQL(object):def __...

weixin_39935257的博客 461

数据操作的封装--sqlhelper

为了提高软件的灵活性和可维护性,软件的代码需要科学的管理,我们引入了架构这个词。设计模式提醒我们,软件中重复性的代码需要封装起来。最近在做收费系统时,需要和数据库进行频繁的联系,既然是重复的使用,就需要封装,这里使用到了sql helper 。

天道酬勤 地道酬善 人道酬诚 2233

Python 接口测试之Excel表格数据操作方法封装

本文介绍了Python操作Excel文件的三种常用模块:xlrd(读取)、xlwt(写入)和openpyxl(支持新版Excel读写)。首先详细讲解了xlrd模块的读取操作及写入时的局限性;其次介绍了纯写入模块xlwt的基本用法;最后重点说明了openpyxl模块对新版Excel的完整读写支持,并提供了多种数据获取方式。文章还展示了如何将这些操作封装成类,提高代码复用性。总结指出这些方法能满足日常需求,同时建议进一步扩展功能。全文通过具体代码示例,为Python操作Excel提供了实用指南。

nhb687095的博客 626

JSP中对MySQL数据操作的封装

<br />这次我们做一个课程项目,我们小组决定利用JSP进行开发,其中的重点是对数据库中的数据的操作,数据库的连接成为重点,我利用一个SqlManager类,对数据库的操作进行了封装,这现在只适用于MYSQL数据库的链接,如果想改变链接到其他数据库,可以自己添加。代码如下<br />package sample;<br />import java.sql.*;<br /><br /><br />public class SqlManager {<br /> private static SqlManage

wjcquking的专栏 2469

Python数据操作方法封装类实例

Python数据操作方法封装类实例这篇文章主要介绍了Python数据操作方法封装类,结合具体实例形式分析了Python针对数据库的连接、执行sql语句、删除、关闭等操作技巧,需要的朋友可以参考下工作中经常会用到数据的插叙、单条数据插入和批量数据插入,以下是本人封装的一个类,推荐给各位:    #!/usr/bin/env python# -*- coding:utf-8 -*-# Author:E...

jiahaowanhao的博客 1142
上一篇: 实战设计模式系列-Facade(外观)
下一篇: 如何把std::string当char *使用?
nellson
博客等级 码龄20年 48粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值