我试图了解模型和数据之间的关系应该是什么。
对于我目前的情况,我有一个 QTcpServer ,它保留了一个活动套接字列表。
class TftpServer : public QTcpServer
{
Q_OBJECT
public:
TftpServer(QObject *parent = 0)
:QTcpServer(parent) {}
QList<QTcpSocket *> m_activeSockets;
模型应该向视图表示的数据是QList<QTcpSocket *> m_activeSockets;
我觉得正确的做法是不惜一切代价防止数据重复,因为这可能导致不一致。这意味着任何时候 View 都应该代表真实状态的数据。
我尝试了一些方法,但没有成功,因为我可以花时间测试每种方法的时间有限。
方法:
1.
TftpServer::m_activeSockets
私有的,Model 通过 getter 和 setter 访问它。
- 缺陷:如何从
TftpServer::m_activeSockets
模型内部调用方法?
2.
模特朋友班TftpServer
。直接访问TftpServer::m_activeSockets
.
- 未能实施。
3.
TftpServer::m_activeSockets
上市。模型具有公共参考
QList<QTcpSocket *> & m_activeSockets;
到TftpServer::m_activeSockets
.
- 缺陷:敏感数据公开
我想找出一个最佳解决方案(随时提出建议)被认为是最佳的。
并听听他们是否是不坚持使用单个数据源的优点(在这种情况下,模型将只有一个副本TftpServer::m_activeSockets
作为其参数并在更改时与它同步)。