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

MVC pattern, which class should own a modifiable data?

本文关键字:有一个 拥有 修改 数据 模式 MVC      更新时间:2023-10-16

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

下面是类图,它接近MVC模型。基本上视图拥有一个数据容器数据容器有许多不同类型的数据(Data1Data2,…)。它还有一个DataModifiableDataModifiable实际上是由ModifyingThread在时间期间修改的。 modifythread 是由View类创建的。

       View -------  ModifyingThread
         |                 |
         |                 |
       DataContainer       |
       |       |          |  
       |       |          |
    Data1    Data2     DataModifiable
DataModifiable对于DataContainer应该是只读的,对于 modifythread 是可写的。

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

通常在MVC

视图由"父视图"拥有,并将它的一些输入注册到控制器上,这样它就可以并且只会触发事件,如果有可能,注册的控制器将对这些事件做出反应。

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

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

所以从我在你的图表中理解,DataContainer是你的控制器,应该拥有你的DataModifiable。

但是你应该改变你的修改线程,使它调用控制器(DataContainer)上的函数,而不是直接对模型(DataModifiable)

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

++你不应该从视图类内部启动一个新的线程,视图类应该为它启动一个RequestEvent,你应该有一个Controller - ThreadController来为你做这项工作。它还允许您在该线程上保留句柄,并有一个类来适当地管理它。MVC的视图部分不应该这样做,因为一些很好的理由…IE MVC lol

相关文章: