Doc-View Architektur richtig anwenden
-
Hallo,
also mein Programm enthält mehrere Views und die App- und Doc-Klasse. Verschiedene Views werden durch Commandos aus der App-Klasse gewechselt. Alles funktioniert einwandfrei. Nun möchte ich in der DOC-Klasse bestimmte Funktionen implementieren, z.B. Datenbankanbindung, Dateiarbeit etc.. was ja nicht in den Views oder im Mainframe direkt geschrieben werden soll.
Wie kann aus den Views diese Funktionen im Doc-Klasse und umgekehrt angesteuert werden zwecks Datenübergabe? Und wann und wie kann/sollte die Serialize Funktion der Doc-Klasse genutzt werden?
Grüße,
rio
-
Ein View kann mit GetDocument() einen Zeiger auf das Dokument erhalten.
Ein Dokument leitet mit UpdateAllViews Benachrichtigungen an die Views weiter.
-
um aus dem Document auf die verschiedenen Views (falls es mehrere gibt) zuzugreifen, gibt es ja folgendes:
CDocument::GetFirstViewPosition( ) const;
CDocument::GetNextView( POSITION& ) const;die serialize Funktion ist dafür da, um Objekt-Zustände dauerhaft in files abzuspeichern:
void CTest_Doc::Serialize(CArchive& ar)
{
if (ar.IsStoring()) // Speichern
{
ar << MeinObjekt1;
ar << MeinObjekt2;
}
else // Lesen muss in der gleichen Reihenfolge geschehen
{
ar >> MeinObjekt1;
ar >> MeinObjekt1;
}
}
-
Weiterhin wird UpdateAllViews im Dokument verwendet umd die Views über Details von Änderungen zu benachrichtigen. Entsprechend bekommt der View per OnUpdate die Infos mitgeteilt.