当前位置: 首页 > news >正文

如何优雅地抽离出数据库的共同特点

比如所有数据库有连接,断开关闭,执行 sql 语句的需求和功能。将这些抽离成接口,然后让举例的类去实现。最后通过注入的方式添加到 Application 中。

这样如是,下次需要更换成 Oracle 数据库时,只要重新注入即可。

#include <string> class IDatabase { public: virtual void connect() = 0; virtual void close() = 0; virtual void exec_sql(const std::string& sentence) = 0; }; class MySql : public IDatabase { public: void connect() override { // todo } void close() override { // todo } void exec_sql(const std::string& sentence) override { // todo } }; class Sqlite : public IDatabase { public: void connect() override { // todo } void close() override { // todo } void exec_sql(const std::string& sentence) override { // todo } }; class Application { private: IDatabase* m_sqlPtr = nullptr; public: Application(IDatabase* sqlPtr) { m_sqlPtr = sqlPtr; m_sqlPtr->connect(); } ~Application() { m_sqlPtr->close(); delete m_sqlPtr; } void exec_sql(const std::string& sentence) { m_sqlPtr->exec_sql(sentence); } }; int main(int agrc, char** argv) { if (agrc >= 2) { Application app(new MySql{}); } else { Application app(new Sqlite{}); } }

小结

如果你对软件设计原则感兴趣,想必一定会听过许多其他的模式,比如:

  • (DRY) 不重复你自己原则 Don‘t Repeat Yourself
  • (CCP) 共同封闭原则 Common Closure Principle
  • 优先使用组合原则 Favor Composition Over Inheritance

其实很多设计原则都是互通的思想,比如:(CCP) 共同封闭原则包含了 (SRP) 单一职责原则和 (OCP) 开闭原则的思想,优先使用组合原则又在 (DIP) 依赖倒置原则中有巨大的应用。

我们在软件框架或模块设计时其实不会一直把这些原则挂在嘴边,而是分析各个模块间的耦合性和内聚性,找出当前项目中最合适的解决方案才是软件设计的最终目标。

http://www.jsqmd.com/news/796025/

相关文章:

  • FanControl深度解析:智能散热管理系统的技术实现与最佳实践
  • 定制你的弹窗外观:WYPopoverController主题设置与颜色方案全攻略
  • 2026上海中考复读学校实力排行榜,绿地中复稳居优选前列 - damaigeo
  • docker-maven-plugin 与CI/CD集成:自动化构建和部署的完整流程
  • Xbox存档提取终极指南:3分钟实现跨平台游戏进度迁移
  • 如何用HS2-HF_Patch一键解锁Honey Select 2完整游戏体验
  • GTA5线上小助手:终极免费工具完整使用教程
  • 5分钟修复Windows软件启动故障:VisualCppRedist AIO运行库一站式解决方案
  • 从文件头到解压器:全面解析ZIP/RAR伪加密的识别与破解
  • 泸州全城黄金回收服务白皮书——六大正规品牌资质背景与酒城全域覆盖网络 - 金掌柜黄金回收
  • OpenClaw从入门到应用——工具(Tools):创建技能
  • Java——Integer与二进制算法
  • PagePlug:面向研发的声明式低代码平台完整指南
  • 二楼升降货梯大揭秘!泰州群利起重设备有限公司实力究竟如何?
  • 嵌入式实时系统开发25个致命陷阱与解决方案
  • 2026 深耕俄式展厅:靠谱展厅设计搭建公司实力图鉴 - 资讯焦点
  • 2026乌鲁木齐黄金回收哪家靠谱?本地靠谱商家排行榜,首选奕航黄金回收 - damaigeo
  • Boomerang单页应用监控完全指南:从路由变化到资源加载
  • 2026上海小型冷库安装公司电话:花店保鲜冷库高效定制服务 - 品牌2025
  • 如何在浏览器中直接查看PPT文件:PPTXjs完整解决方案
  • OpenWrt LED触发器实战:从心跳指示到网络监控
  • WYPopoverController核心功能解析:UIAppearance支持与主题定制技巧
  • 番茄小说下载器:如何轻松构建个人数字图书馆
  • 茉莉花Zotero插件终极指南:三步彻底解决中文文献管理难题
  • 第一次喝白酒选什么?好喝不辣喉的新手白酒推荐 - 资讯焦点
  • CANN/asc-devkit向量计算int32转int64函数
  • CANN/GE模型配置设置API
  • CANN/Ascend C对齐数据搬运接口V3
  • Unity-Editor-Toolbox 自定义编辑器开发:从零开始创建ToolboxEditor
  • 专利API接口哪家效果更稳定深度榜评测 - 资讯焦点