news 2026/5/11 13:26:15

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何优雅地抽离出数据库的共同特点

比如所有数据库有连接,断开关闭,执行 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) 依赖倒置原则中有巨大的应用。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 13:21:30

Worker-Plugin性能优化:多Worker、代码分割和懒加载的最佳方案

Worker-Plugin性能优化&#xff1a;多Worker、代码分割和懒加载的最佳方案 【免费下载链接】worker-plugin &#x1f469;‍&#x1f3ed; Adds native Web Worker bundling support to Webpack. 项目地址: https://gitcode.com/gh_mirrors/wo/worker-plugin 在现代Web开…

作者头像 李华
网站建设 2026/5/11 13:19:45

LiteLoaderQQNT终极架构解析:从插件加载器到企业级扩展平台

LiteLoaderQQNT终极架构解析&#xff1a;从插件加载器到企业级扩展平台 【免费下载链接】LiteLoaderQQNT QQNT 插件加载器&#xff1a;LiteLoaderQQNT —— 轻量 简洁 开源 福瑞 项目地址: https://gitcode.com/gh_mirrors/li/LiteLoaderQQNT 在QQNT生态系统中&#…

作者头像 李华
网站建设 2026/5/11 13:18:44

Postmate部署实战:从开发到生产的完整流程

Postmate部署实战&#xff1a;从开发到生产的完整流程 【免费下载链接】postmate &#x1f4ed; A powerful, simple, promise-based postMessage library. 项目地址: https://gitcode.com/gh_mirrors/po/postmate Postmate是一个强大的、简单的、基于Promise的postMess…

作者头像 李华
网站建设 2026/5/11 13:17:36

Unity-Editor-Toolbox 自定义编辑器开发:从零开始创建ToolboxEditor

Unity-Editor-Toolbox 自定义编辑器开发&#xff1a;从零开始创建ToolboxEditor 【免费下载链接】Unity-Editor-Toolbox Tools, custom attributes, drawers, hierarchy overlay, and other extensions for the Unity Editor. 项目地址: https://gitcode.com/gh_mirrors/un/U…

作者头像 李华
网站建设 2026/5/11 13:17:33

AI-Trader成本优化:降低AI交易系统运营成本的完整方案

AI-Trader成本优化&#xff1a;降低AI交易系统运营成本的完整方案 【免费下载链接】AI-Trader "AI-Trader: 100% Fully-Automated Agent-Native Trading" 项目地址: https://gitcode.com/GitHub_Trending/aitrad/AI-Trader AI-Trader作为100%全自动化智能交易…

作者头像 李华