Alternatywy dla architektury dokument/widok
Aplikacje MFC zwykle używają architektury dokumentu/widoku do zarządzania informacjami, formatami plików i wizualną reprezentacją danych dla użytkowników. W przypadku większości aplikacji klasycznych architektura dokumentu/widoku jest odpowiednią i wydajną architekturą aplikacji. Ta architektura oddziela dane od wyświetlania, a w większości przypadków upraszcza aplikację i zmniejsza nadmiarowy kod.
Jednak architektura dokumentu/widoku nie jest odpowiednia w niektórych sytuacjach. Rozważ następujące przykłady:
Jeśli przenosisz aplikację napisaną w języku C dla systemu Windows, warto ukończyć port przed dodaniem obsługi dokumentu/widoku do aplikacji.
Jeśli piszesz lekkie narzędzie, możesz to zrobić bez architektury dokumentu/widoku.
Jeśli oryginalny kod już miesza zarządzanie danymi z wyświetlaniem danych, przeniesienie kodu do modelu dokumentu/widoku nie jest warte wysiłku, ponieważ należy oddzielić te dwa. Możesz wolisz pozostawić kod w następujący sposób.
Aby utworzyć aplikację, która nie korzysta z architektury dokumentu/widoku, wyczyść pole wyboru Obsługa architektury dokumentu/widoku w kroku 1 Kreatora aplikacji MFC. Aby uzyskać szczegółowe informacje, zobacz Kreator aplikacji MFC.
Uwaga
Aplikacje oparte na oknach dialogowych utworzonych przez Kreatora aplikacji MFC nie korzystają z architektury dokumentu/widoku, dlatego pole wyboru Obsługa architektury dokumentu/widoku jest wyłączone, jeśli wybierzesz typ aplikacji okna dialogowego.
Kreatory języka Visual C++, a także edytory źródłowych i dialogowych, współpracują z wygenerowaną aplikacją tak samo jak w przypadku każdej innej aplikacji wygenerowanej przez kreatora. Aplikacja może obsługiwać paski narzędzi, paski przewijania i pasek stanu oraz pole Informacje . Aplikacja nie zarejestruje żadnych szablonów dokumentów i nie będzie zawierać klasy dokumentów.
Pamiętaj, że wygenerowana aplikacja ma klasę widoków , CChildView
pochodzącą z CWnd
klasy . MFC tworzy i umieszcza jedno wystąpienie klasy widoku w oknach ramowych utworzonych przez aplikację. MFC nadal wymusza korzystanie z okna widoku, ponieważ upraszcza pozycjonowanie zawartości aplikacji i zarządzanie nią. Możesz dodać kod malowania do OnPaint
składowej tej klasy. Kod powinien dodać paski przewijania do widoku, a nie do ramki.
Ponieważ architektura dokumentu/widoku zapewniana przez MFC jest odpowiedzialna za implementację wielu podstawowych funkcji aplikacji, jej brak w projekcie oznacza, że odpowiadasz za implementację wielu ważnych funkcji aplikacji:
Zgodnie z instrukcjami Kreatora aplikacji MFC menu aplikacji zawiera tylko polecenia Nowe i Zakończ w menu Plik . (Nowe polecenie jest obsługiwane tylko w przypadku aplikacji MDI, a nie aplikacji SDI bez obsługi dokumentów/widoków. Wygenerowany zasób menu nie będzie obsługiwał listy MRU (ostatnio używanej).
Należy dodać funkcje i implementacje programu obsługi dla wszystkich poleceń, które będą obsługiwane przez aplikację, w tym otwórz i zapisz w menu Plik . MFC zwykle udostępnia kod do obsługi tych funkcji, ale obsługa ta jest ściśle powiązana z architekturą dokumentu/widoku.
Jeśli zażądano, pasek narzędzi aplikacji będzie minimalny.
Zdecydowanie zaleca się użycie Kreatora aplikacji MFC do tworzenia aplikacji bez architektury dokumentu/widoku, ponieważ kreator gwarantuje poprawną architekturę MFC. Jeśli jednak nie musisz używać kreatora, poniżej przedstawiono kilka metod pomijania architektury dokumentu/widoku w kodzie:
Traktuj dokument jako nieużywany dodatek i zaimplementuj kod zarządzania danymi w klasie widoków, jak pokazano powyżej. Obciążenie dokumentu jest stosunkowo niskie. Pojedynczy obiekt CDocument wiąże się z niewielką ilością nakładu pracy, a także niewielkie obciążenie
CDocument
klas bazowych, CCmdTarget i CObject. Obie te ostatnie klasy są małe.Zadeklarowane w pliku
CDocument
:Dwa
CString
obiekty.Trzy BOOLs.
Jeden
CDocTemplate
wskaźnik.Jeden
CPtrList
obiekt, który zawiera listę widoków dokumentu.
Ponadto dokument wymaga czasu na utworzenie obiektu dokumentu, jego obiektów widoku, okna ramki i obiektu szablonu dokumentu.
Traktuj zarówno dokument, jak i widok jako nieużywane dodatki. Umieść zarządzanie danymi i rysowanie kodu w oknie ramki, a nie w widoku. Takie podejście jest bliżej modelu programowania w języku C.
Zastąpij części struktury MFC, które tworzą dokument i widok, aby w ogóle je wyeliminować. Proces tworzenia dokumentu rozpoczyna się od wywołania metody
CWinApp::AddDocTemplate
. Wyeliminuj to wywołanie z funkcji składowejInitInstance
klasy aplikacji, a zamiast tego utwórz w sobie oknoInitInstance
ramki. Umieść kod zarządzania danymi w klasie okna ramowego. Proces tworzenia dokumentu/widoku jest zilustrowany w sekcji Tworzenie dokumentu/widoku. Jest to bardziej praca i wymaga głębszego zrozumienia struktury, ale zwalnia cię całkowicie z nakładu pracy nad dokumentem/widokiem.
Artykuł MFC: Używanie klas baz danych bez dokumentów i widoków zawiera bardziej konkretne przykłady alternatywnych dokumentów/widoków w kontekście aplikacji baz danych.