gpt4 book ai didi

c++ - 我需要重新设计我的应用程序吗?

转载 作者:太空狗 更新时间:2023-10-29 23:00:21 25 4
gpt4 key购买 nike

我可能会在此处讨论讨论类型的问题,所以如果问题不够具体,我深表歉意。

我想知道我当前的应用程序设计是否存在天生的弱点/缺陷。我的背景是 C,所以我没有在最大程度上使用聪明的 C++ 模式,这一点我敢肯定。

我的应用程序类似于 3D 建模包,无需创建几何体(例如使用现有模型设置动画)。用户导入一个几何图形并可以在预先存在的几何图形上设置各种参数,并且存在与整个系统相关的时间相关值。输出是要由另一个应用程序处理的文本文件。

我正在使用 QTreeview 来呈现 QStandardItemModel。我只是将指向我的核心类的指针存储在模型的项中。它们对每个类类型都有特定的 UI,并且都派生自一个公共(public)基类。他们都有一个 QWidget,这是他们的“主要部件”

当用户单击 TreeView 的一部分时,将检索存储的类并将其主要部件显示在 UI 的 Pane 中。所以 - 左侧的 TreeView ,右侧的 Pane 显示当前项目的内容,以及显示几何图形的 3D View 。

我的大部分数据都存储在类 UI 元素本身中;我没有存储任何东西的中央数据库,当需要保存项目时,我遍历树并让每个项目将其自身写入 QSettings 文件。这感觉很天真,但它确实有效,相反的情况发生在项目负载上。项目类根据设置文件中的类型信息生成新的类,然后它们自己从文件中读取内容。

与写入输出文件时类似,每个项目都知道如何编写自己并照做了。在其他类可以影响其他类的输出(例如,开始和结束时间)的情况下,更高级别的类处理子类并将根据每个子类的顺序和持续时间设置开始和结束时间。

我应该在 QStandardItemModel 本身中存储更多数据,还是应该定义我自己的模型?听起来我是否已经为 future 的问题做好了准备?

目前我已经对该系统进行了几次修改以提供定制的应用程序,但我将尝试使其更加通用。我欢迎提出改进我的设计的建议。请放轻松!

最佳答案

你应该尽量避免创建god objects .将您的任务和职责分成更小的 block 。它使维护更容易,如果需要,扩展也更容易。

您的特定用例将从更完整地使用 Model-View-Controller pattern 中获益良多.

在您的设计中没有意义的是您的数据对象包含一个 UI 元素。由于右 Pane 中只能显示一个项目,这似乎是一种资源浪费。将单个对象传递给要显示的数据对象更有意义。

我对您的程序的建议如下:

  1. 将您的数据拆分为仅具有报告和修改值功能的类。应该不知道如何显示数据或存储到文件。
  2. 创建单独的类来处理文件的读取和写入。如果您的模型非常简单,您可以使用 QDataStreamQTextStream 文档中显示的方法使用单个函数来执行此操作。
  3. 使用您的QTreeViewQStandardItemModel 作为Adaptor class在您的数据对象和左侧面板之间。
  4. 创建一个 Controller 类,如果需要在右侧面板中显示数据,该 Controller 类会收到 QTreeView 的通知。然后 Controller 将检索数据项并将其传递到右侧面板以便显示。
  5. 右侧面板应该像另一个 View 类一样,仅负责以图形方式显示从 Controller 类传入的数据。

这样做的一个好处是,如果有不同类别的数据在右侧面板中以不同方式显示, Controller 可以检查所选数据项,确定类别是什么,创建一个 View 小部件以放置在右侧面板中,然后将数据传递给它以显示。就可扩展性而言,这种模式是开放式的,因为如果您需要一个新的显示,您不需要更改数据类,您只需要创建一个新的右面板小部件,然后教您的 Controller 类如何确定何时应使用新 View 。

此模式的另一个优点是您只需要创建一个小部件即可在右侧面板中显示数据。如果你改变你选择的项目,你可以把它传递给已经存在的 View 类,并让它用新选择的数据刷新它的显示。如果选择了不同类别的数据对象并且需要以不同的方式绘制其数据,则只需要销毁右面板 View 小部件。 Controller 类可以确定是否可以重新使用右面板 View 小部件,或者是否需要将其换成不同的小部件。

关于c++ - 我需要重新设计我的应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33997006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com