モデルとデータの関係がどうあるべきかを理解しようとしています。
私の現在の状況では、アクティブなソケットのリストを保持する QTcpServer があります。
class TftpServer : public QTcpServer
{
Q_OBJECT
public:
TftpServer(QObject *parent = 0)
:QTcpServer(parent) {}
QList<QTcpSocket *> m_activeSockets;
モデルがビューに表すデータはQList<QTcpSocket *> m_activeSockets;
それを行う正しい方法は、不整合につながる可能性があるため、データの重複を何としてでも防止することだと思います。つまり、ビューは常に実際の状態のデータを表す必要があります。
私はいくつかのアプローチを試しましたが、各アプローチのテストに費やす時間が限られているため、成功しませんでした。
アプローチ:
1.
TftpServer::m_activeSockets
プライベート、モデルはゲッターとセッターを介してアクセスします。
TftpServer::m_activeSockets
欠陥:モデル内からメソッドを呼び出す方法は?
2.
のモデルフレンドクラスTftpServer
。に直接アクセスしTftpServer::m_activeSockets
ます。
- 実装に失敗しました。
3.
TftpServer::m_activeSockets
公衆。モデルには公開参照があります
QList<QTcpSocket *> & m_activeSockets;
にTftpServer::m_activeSockets
。
- 欠陥: 機密データが公開されている
最適な解決策 (お気軽に提案してください) が最適と見なされることを確認したいと思います。
また、単一のデータ ソースに固執しないことの長所を聞いてください (その場合、モデルはTftpServer::m_activeSockets
パラメーターとして のコピーを持ち、変更時にそれと同期します)。