Правильно спроектировать приложение для редактирования кода - PullRequest
2 голосов
/ 21 января 2010

Я работаю над личным проектом, который по сути является редактором кода. Представьте себе стандартное меню «Файл» с элементами меню «Создать», «Открыть», «Сохранить», «Сохранить как», «Сохранить все», «Закрыть», «Закрыть все».

Я застрял с правильным дизайном. В настоящее время у меня есть:

  • Класс Document, представляющий документ - элемент управления для редактирования кода, соответствующую вкладку на панели вкладок и различные свойства, такие как Заголовок, Имя файла, IsModified и т. Д.
  • Класс Documents, представляющий все открытые документы. Содержит такие методы, как New, Open (FileName), ...

Проблема в том, что я не могу понять, какая команда класса / меню отвечает за какие задачи.

Например, с помощью File-> New команда меню проста - вызвать Documents.New и все.

Но что за Файл-> Открыть? Метод Documents.Open ожидает имя файла в качестве параметра. Поэтому перед вызовом этого метода мне нужно открыть диалоговое окно выбора файла, позволить пользователю выбирать файлы и для каждого файла вызывать Documents.Open (FileName). Где лучше всего разместить этот вспомогательный код в команде меню, переписать Documents.Open и поместить его туда?

То же самое с сохранением действий. Кто отвечает за сохранение? Это класс Documents, который использует Document.Editor.SaveToFile (FileName) или лучше создать метод Save в классе Document? Где-то посередине также нужно спросить пользователя, хочет ли он сохранить текущий документ ...

Я застрял. Есть идеи?

Отредактировано: язык программирования Delphi.

Ответы [ 2 ]

0 голосов
/ 08 марта 2011

Вам необходим объект Singleton (DocumentManager), который управляет всеми операциями с документами. Это будет иметь такие функции, как:

  • Get (idList)
  • GetNew
  • Save (списке документов)
  • Обновить
  • и т.д ...
0 голосов
/ 21 января 2010

ИМХО, вы добавляете слишком много обязанностей к вашему классу Документов. Единственная ответственность класса Documents должна заключаться в том, чтобы поддерживать коллекцию Documents с некоторой связанной функцией (например, обрабатывать несколько экземпляров одного и того же документа, проверять, все ли документы закрыты, считать детей и т. Д.)

Открытие документа или даже создание нового документа (например, что делать, если вам нужно выбрать формат) - это отдельные операции, которые в конечном итоге приводят к созданию нового документа, который затем добавляется в класс Documents. По моему мнению, вам даже не следует взаимодействовать с классом Documents, пока вы не будете готовы передать объект Document.

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

...