Поделиться через


Альтернативы для архитектуры "документ-представление"

Приложения MFC обычно используют архитектуру документа и представления для управления информацией, форматами файлов и визуальным представлением данных пользователям. Для большинства классических приложений архитектура документа и представления — это соответствующая и эффективная архитектура приложений. Эта архитектура отделяет данные от просмотра и, в большинстве случаев, упрощает приложение и сокращает избыточный код.

Однако архитектура документа и представления не подходит для некоторых ситуаций. Рассмотрим следующие примеры.

  • Если вы переносите приложение, написанное на языке C для Windows, вам может потребоваться завершить порт перед добавлением поддержки документа или просмотра в приложение.

  • Если вы пишете упрощенную программу, вы можете найти, что можно сделать без архитектуры документа или представления.

  • Если исходный код уже смешает управление данными с просмотром данных, перемещение кода в модель документа или представления не стоит усилий, так как необходимо разделить два. Вы можете оставить код как есть.

Чтобы создать приложение, которое не использует архитектуру документа или представления, снимите флажок поддержки архитектуры document/View проверка на шаге 1 мастера приложений MFC. Дополнительные сведения см. в мастере приложений MFC.

Примечание.

Приложения на основе диалоговых окон, созданные мастером приложений MFC, не используют архитектуру документа или представления, поэтому если выбрать тип приложения диалогового окна, то поддержка архитектур проверка ы document/View отключена.

Мастеры Visual C++ и редакторы исходных и диалоговых окон работают с созданным приложением так же, как и с любым другим приложением, созданным мастером. Приложение может поддерживать панели инструментов, полосы прокрутки и строку состояния, а также поле "Сведения ". Приложение не будет регистрировать шаблоны документов, и оно не будет содержать класс документов.

Обратите внимание, что созданное приложение имеет класс представления, CChildViewпроизводный от CWnd. MFC создает и позиционирует один экземпляр класса представления в окнах кадров, созданных приложением. MFC по-прежнему применяется с помощью окна представления, так как упрощает размещение и управление содержимым приложения. Вы можете добавить код рисования в OnPaint член этого класса. Код должен добавлять полосы прокрутки в представление, а не в кадр.

Так как архитектура документа и представления, предоставляемая MFC, отвечает за реализацию многих основных функций приложения, его отсутствие в проекте означает, что вы несете ответственность за реализацию многих важных функций приложения:

  • Как указано мастером приложений MFC, меню для приложения содержит только команды "Создать" и "Выйти" в меню "Файл". (The Новая команда поддерживается только для приложений MDI, а не для приложений SDI без поддержки Document/View.) Созданный ресурс меню не будет поддерживать список MRU (последний используемый).

  • Необходимо добавить функции и реализации обработчика для всех команд, которые будет поддерживать ваше приложение, включая открытие и сохранение в меню "Файл ". MFC обычно предоставляет код для поддержки этих функций, но эта поддержка тесно привязана к архитектуре документа или представления.

  • Панель инструментов для приложения, если вы запрашивали ее, будет минимальной.

Настоятельно рекомендуется использовать мастер приложений MFC для создания приложений без архитектуры документа или представления, так как мастер гарантирует правильную архитектуру MFC. Однако если вы не должны использовать мастер, ниже приведены несколько подходов для обхода архитектуры документа или представления в коде:

  • Обратитесь к документу как неиспользуемой надстройке и реализуйте код управления данными в классе представления, как показано выше. Затраты на документ относительно низкие. Один объект CDocument сам по себе вызывает небольшую нагрузку, а также небольшие затраты базовых CDocumentклассов, CCmdTarget и CObject. Оба последних класса являются небольшими.

    Объявлен в CDocument:

    • Два CString объекта.

    • Три boOLs.

    • Один CDocTemplate указатель.

    • Один CPtrList объект, содержащий список представлений документа.

    Кроме того, документу требуется время для создания объекта документа, его объектов представления, окна фрейма и объекта шаблона документа.

  • Обрабатывать как документ, так и просматривать как неиспользуемые добавления. Поместите код управления данными и рисования в окно фрейма, а не в представление. Этот подход ближе к модели программирования на языке C.

  • Переопределите части платформы MFC, создающие документ и представление, чтобы исключить их создание. Процесс создания документа начинается с вызова CWinApp::AddDocTemplate. Исключите этот вызов из функции-члена класса InitInstance приложения и, вместо этого, создайте окно фрейма самостоятельно InitInstance . Поместите код управления данными в класс окна кадра. Процесс создания документа или представления иллюстрируется в разделе "Создание документа или представления". Это больше работы и требует более глубокого понимания платформы, но она полностью освобождает вас от затрат на документ или просмотр.

В статье MFC. Использование классов баз данных без документов и представлений содержит более конкретные примеры вариантов документов и представлений в контексте приложений базы данных.

См. также

Архитектура документа и представления