首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IO操作的C++设计模式

IO操作的C++设计模式
EN

Stack Overflow用户
提问于 2022-03-02 18:20:50
回答 1查看 56关注 0票数 0

我想开发一个需要从外部数据源(Database/Files/.)提取数据的应用程序。我找不到一个很好的模式。

假设数据库中有以下结构:

  • VariableTypeTable:id +一些stuff
  • VariableTable:id +一些东西+对VariableTypeTable

的引用

我可能想要3门课:

  • VariableType封装为Variable
  • VariableManager来管理对象生存期+和一些业务操作(搜索等)

是否有一种加载数据的通用模式?我应该在哪里和如何处理IO操作?

一些想法:

  • VariableVariableType不应该知道(或者至少不知道)关于IO的任何事情。
  • 也许可以提供一些IO操作,但是我会在同一个位置(打破SRP?)拥有业务逻辑和IO。如果我分割Manager和IO操作,如何保持同步?例如,创建一个新变量应该将变量添加到数据库中,并将管理器updated.
  • Injecting一些接口VariableManagerIO保留到VariableManager中,以处理IO,并且只操作Manager。如何报告IO错误?

编辑:

我给出的例子过于简化,但我的主要问题超出了自反/持久化。

我也在把这个问题再扩展一点。如果某些业务函数需要查询数据,因为它更简单(例如,使用复杂的SQL请求),该怎么办?

EN

回答 1

Stack Overflow用户

发布于 2022-03-02 20:45:28

听起来像是在寻找某种类型的数据库持久对象。如果你为c++ database persistence做谷歌,你会得到一些点击。我对那些图书馆都不熟悉。

这是一个比看上去更复杂的问题。多年来,存在着无数的持久对象系统。我已经用了大约一打(大概是几百)。他们都以这样或那样的方式被吸走了,但你通常可以用他们中的任何一个完成工作。

我自己玩。我可以在睡梦中编写PSQL对象处理,我通常编写建模工具和代码生成器。我很简单。

对象本身并不知道它们被持久化。他们不知道他们可能被储存在数据库里。我使用一组并行的类来读和写它们。但是,他们可能知道如何使用我使用的任何JSON库,因此从平面JSON文件中保存/加载变得非常简单。非常非常容易编码。

我在我的宠物项目中使用的一个版本是:

https://github.com/jplflyer/Persist

这取决于:

https://github.com/jplflyer/ShowLib

对于我如何做事情和假设PostgreSQL,这是非常具体的。

对于管理更新,我的工具不会为您这样做。你必须知道你已经做了改变,并坚持自己。这就是所有各种持久对象库都会变得混乱的地方。有些人比其他人做得更好。

我更喜欢“POJO”--这实际上是一个Java术语。普通的旧Java对象。在这种情况下,普通的旧C++对象。一旦你开始教你的对象它们生活在一个数据库中,它们就会变得非常混乱。因为我控制更新的发生方式,所以我也可以在更新的同时向我的持久化引擎添加一个调用。

但如果你需要自动链接,也许我在第1段中建议的谷歌页面中的一个链接会对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71327435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档