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


  • Mod

    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;
    }
    }


  • Mod

    Weiterhin wird UpdateAllViews im Dokument verwendet umd die Views über Details von Änderungen zu benachrichtigen. Entsprechend bekommt der View per OnUpdate die Infos mitgeteilt.


Anmelden zum Antworten