MVC模式,哪个类应该拥有可修改的数据?

时间:2014-07-10 19:30:42

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

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

下面是类图,它接近MVC模型。基本上,View拥有 DataContainer DataContainer 有许多不同类型的数据( Data1 Data2 ,..)。它还有一个 DataModifiable DataModifiable 实际上是在 ModifyingThread 期间修改的。 修改线程查看类创建。

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

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

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

1 个答案:

答案 0 :(得分:0)

MVC中的Normaly

视图由“父视图”拥有,并将其中的一些输入注册到控制器上,以便它可以并且只会触发事件,如果能够注册的控制器将对其进行响应。

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

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

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

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

这样做会导致一些非常清晰的MVC,你也可以重命名你的类,这样只有通过读取类名,我们知道它是mvc的哪一部分。

++你不应该从视图类中启动一个新线程,视图类应该为它启动一个RequestEvent,你应该有一个Controller - ThreadController来为你完成这项工作。它还允许您保留该线程的句柄并有一个类来正确管理它。查看MVC的一部分不应该出于某种原因这样做... IE MVC lol