首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我不需要数据库中的所有值时,如何部分初始化c++对象?

当我不需要数据库中的所有值时,如何部分初始化c++对象?
EN

Stack Overflow用户
提问于 2020-06-18 16:45:31
回答 1查看 33关注 0票数 0

我试图在c++程序中减少网络查询的数量(以提高速度),并且在显示搜索结果时,我不希望在只需要显示部分信息时,搜索中找到的每个(有时数千个)对象都从数据库中完全初始化自己。

执行一个更大的查询的速度要快得多,在这个查询中,我一次获得想要在查询中显示的关于对象的所有信息(例如,对于每个对象/行,我选择id、名称和位置),将它们传递给一个更大的构造函数,并让所有其他成员都成为默认值。以前,以及在其他需要完整对象的情况下,我只需将ID传递给对象,然后直接调用initializeFromDatabase()来设置所有其他值。

代码语言:javascript
运行
复制
//current solution (problem is, I might need many constructors like this for different purposes)
auto *myobject = new MyObject(345, "ObjectName", "Europe");
//no further (costly) initialization since I only need the following 2 values for my search results.
myobject->getName();
myobject->getLocationName();

//prevous solution (resulting in too many queries)
auto *myobject = new MyObject(345);
myobject->initializeFromDatabase();
myobject->getName();
myobject->getLocationName();
//I could also query the other 30 or so members here, everything is set.

虽然这看起来不像是一个好的实践,但是我还需要其他的自定义构造函数,比如显示对象的其他类型数据的另一个搜索窗口。

有没有什么通用的最佳实践/合适的设计模式来解决这类问题?我应该创建一个“搜索对象”,它是它自己的类,然后在需要时可以用来创建完整的对象吗?或者总是只使用数据库ID进行初始化(设置对象尚未初始化的标志)并使用我需要的设置器?

EN

回答 1

Stack Overflow用户

发布于 2020-06-19 16:48:34

我发现这个问题的解决方案是使用某种延迟加载,因为我想快速加载列表的部分对象,然后在用户单击其中一个对象时加载所有对象。例如,虚拟代理或Ghost设计模式将是合适的。我简单地创建了一个代理对象,用于显示搜索结果(以及程序中的其他列表),它可以按需创建完整的对象。每个代理对象都有一个构造函数,因此我避免了为不同的目的使用许多不同的构造函数的问题。

请参阅Martin Fowler所著的企业应用程序架构模式( Addison-Wesley Professional,2002)的第11章

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

https://stackoverflow.com/questions/62445948

复制
相关文章

相似问题

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