Правильно разработайте приложение-редактор кода

StackOverflow https://stackoverflow.com/questions/2110562

Вопрос

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

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

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

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

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

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

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

Я застрял.Есть какие-нибудь идеи?

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

Это было полезно?

Решение

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

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

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

Другие советы

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

  • Получить (idList)
  • Получить новый
  • Сохранить (список документов)
  • Обновить
  • и т.д...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top