MVC模式,哪个类应该拥有一个可修改的数据
MVC pattern, which class should own a modifiable data?
我的问题是关于一个设计相关的问题。
下面是类图,它接近MVC模型。基本上视图拥有一个数据容器。数据容器有许多不同类型的数据(Data1, Data2,…)。它还有一个DataModifiable。DataModifiable实际上是由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
- 有一个打印语句的函数是一种糟糕的编程实践吗
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 有没有可能有一个只有ADL才能找到的非好友功能
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 在学习数据结构之前对STL有一个了解是好的吗?
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 是否可以在C++中有一个"generic"模板参数,该参数可以是非类型模板参数或类型?
- 我的输出中有一个额外的 0,为什么会这样
- 节点是否为空,即使它有一个值?
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 在 Stream C++ 文本之前有一个额外的换行符
- 我可以有一个 ELI5 作为参考和指针以及何时使用它们吗?
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 有一个构造函数,但有两个析构函数
- 有一个临时或字面意思是否有必要拥有rvalue