【问题标题】:MVC pattern, which class should own a modifiable data?MVC 模式,哪个类应该拥有可修改的数据?
【发布时间】:2014-07-10 19:30:41
【问题描述】:

我的问题是关于设计相关的问题。

下面是类图,接近MVC模型。基本上视图拥有一个DataContainerDataContainer 有许多不同类型的数据(Data1Data2、..)。它还有一个DataModifiableDataModifiable 实际上是由 ModifyingThread 在一段时间内修改的。 ModifyingThreadView 类创建。

       View -------  ModifyingThread
         |                 |
         |                 |
       DataContainer       |
       |       |     \     |  
       |       |      \    |
    Data1    Data2     DataModifiable

DataModifiable 对于 DataContainer 应该是只读的,对于 ModifyingThread 应该是可写的。

这是我的问题:哪个类应该拥有 DataModiable,哪个类应该创建它?是 DataModifiable 还是 DataContainer

【问题讨论】:

标签: c++ class design-patterns model-view-controller uml


【解决方案1】:

在 MVC 中通常

视图归“父视图”所有,并将其中的一些输入注册到控制器上,以便它能够并且只会触发事件,如果能够,注册的控制器将对其做出反应。

该控制器拥有 DataModel,并根据从视图接收到的事件,将函数应用于模型或其内部状态。

模型通常不会与控制器进行太多通信,但可以使用“事件系统”,这样控制器就不必每隔 X 秒查询一次模型来确定它的状态。

因此,根据我在您的图表中的理解,DataContainer 是您的控制器,应该拥有您的 DataModifiable。

但是您应该更改您的修改线程,以便它在控制器(DataContainer)上调用函数,而不是直接在模型(DataModifiable)上调用函数

这样做会产生一些非常清晰的 MVC,您还可以重命名您的类,以便仅通过读取类名我们就知道它是 mvc 的哪一部分。

++ 你不应该从视图类中启动一个新线程,视图类应该为它启动一个 RequestEvent 并且你应该有一个控制器 - 线程控制器来为你完成这项工作。它还允许您保留该线程的句柄并有一个类来正确管理它。出于某种充分的理由,MVC 的视图部分不应该这样做...... IE MVC 大声笑

【讨论】:

    猜你喜欢
    • 2013-03-05
    • 1970-01-01
    • 2012-05-06
    • 2011-04-12
    • 2020-06-30
    • 2010-11-11
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多