【问题标题】:Object Oriented Design Choice面向对象的设计选择
【发布时间】:2014-03-16 04:09:51
【问题描述】:

我有一个关于在哪里创建、拥有和销毁数据的问题。 数据本身是大型数字表,随机生成或从硬盘驱动器读取。然后对这些数据进行分析,根据分析的具体内容,我制作了一些类似包装器的结构,它们封装了所需的功能。由于包装器可以在后期切换,我决定不创建/读取包装器构造函数中的数据,而只是在“主”函数中处理它们。然后包装器只看到数据的指针。 首先,这是常见的/一个好主意,还是包装器应该始终拥有它自己包装的数据副本? 好吧,接下来我创建了一个“菜单”类,以便更好地浏览数据创建/分析选择等,最简单的方法是将数据作为菜单类的一部分。不过这感觉不太好,那我应该把它放在哪里呢?它应该留在主类吗?

我希望这是可以理解的。如果没有,我可以尝试更好地概述正在发生的事情。 感谢您的阅读。

【问题讨论】:

  • 由于您的数据相当大,因此将其读入并将其存储在合适的结构或类中是完全有意义的。然后分析对象可以通过指针或引用访问数据。至于数据存储在哪里,菜单似乎不正确 - 主类有什么问题?
  • 这样做似乎很麻烦,但回想起来,应该在那里准确地处理创建显式数据。很高兴听到我不需要重写它。

标签: c++ oop wrapper


【解决方案1】:

您可以创建一个data 类,并围绕它包装其他类。数据类的对象可能应该是全局的或在main 中定义。除此之外 - 你的想法似乎不错。定义了data 类后,您还可以将指针/引用传递给菜单,因此您不会遇到问题。请注意,如果您愿意,菜单也可以作为包装器。

【讨论】:

  • 感谢您的安慰。我现在创建了一个包装器基类,所有的东西都从它继承,所以我将数据保存在 main 中,并使用该基类作为菜单中的接口来处理包装器。
【解决方案2】:

将数据的详细信息保存在特定的包装类中通常是一个更好的主意(我认为您的意思是派生类?)。您的包装类应该派生自接口或抽象类型。您可以在 main() 中构造包装类工厂,并将工厂传递给构造函数(在 main() 中实例化的类的构造函数)。稍后当需要打开或创建特定于数据的包装器时,调用工厂方法。工厂可以拥有指针,我的意思是他们调用 new() 和 delete()。尝试查找 SOLID 原则,看看它们如何指导您。

【讨论】:

  • 我之前也想过用工厂,但后来决定放弃了,可能我还是会做。当我觉得事情变得太混乱时,这可能会做到。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多