Нужна помощь с дизайном приложения (MVC, классы и т.д.)

#objective-c #model-view-controller #class #object

#цель-c #модель-вид-контроллер #класс #объект #objective-c #модель-представление-контроллер

Вопрос:

Я довольно новичок в объектно-ориентированном программировании (у меня есть знания в области написания сценариев в PHP и программировании оболочки Posix), и я работаю над приложением для приготовления пива. Я уже начал проект, но я предполагаю, что дизайн не так хорош с точки зрения MVC. Я надеюсь, вы поможете мне сделать дизайн правильным. Вот несколько вещей, которые следует знать о приложении.

Приложение должно быть приложением на основе документов (открывать / сохранять рецепты в Beer XML). В главном окне есть несколько текстовых полей для задания такой информации, как: название, тип пива, объем и т.д. Затем есть пара табличных представлений с массивами для: солода, хмеля и специй, у каждого из которых есть свой собственный лист для добавления значений.

Как я должен создавать свои классы? Нравится это?

  • Класс NSDocument (с открытым / сохраненным XML-кодом)
  • (3 раза) NSWindowController (для каждого листа: солод, хмель, специи)
  • (3 раза) NSArrayController (для каждого представления таблицы: солод, хмель, специи)

Должны ли массивы, управляемые объектами NSArrayController, быть отдельными классами (с точки зрения MVC (как модели)) Или они должны быть включены в их класс NSArrayController?

Комментарии:

1. Для начала удалите префикс «NS» из имен.

2. В массивах уже есть классы, зачем вы создаете их еще больше?

3. Я имел в виду, должен ли у вас быть класс, например, под названием hopBill. В котором есть методы для добавления / удаления hopAdditions из hopBill. И позволить контроллеру массива управлять массивом в классе?

Ответ №1:

Я бы начал с ознакомления с парой документов, предоставленных Apple:Объектно-ориентированное программирование на Objective-C и Руководство по основам Cocoa.

Я бы также рассмотрел возможность использования Core Data. При относительно небольшой реализации у вас есть очень мощная структура данных (M в MVC), которую легко реализовать с помощью вашего представления и контроллеров просмотра (V amp; C): Руководство по программированию Core Data

Я настоятельно рекомендую прочитать это. Они неплохо читаются, и вы получаете МАССУ знаний. Документы Apple действительно лучшие.

Удачи.

Комментарии:

1. Да, я уже много прочитал (и все еще продолжаю читать). Но мне просто интересно, на правильном ли я пути.

Ответ №2:

Предполагая, что это ваши требования,

  • Приложение-редактор, использующее xml (beerxml) в качестве источника данных.
  • Средство просмотра, которое показывает доступные данные (в табличном формате или в виде листов)
  • Пользователь может добавлять / удалять / редактировать записи в каждом xml
  • Существует взаимосвязь между xml (источниками данных) (не уверен …)

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

Например, receipes.xml используется для обозначения рецептов, используемых для изготовления продукта. Чтобы создать класс для этого, перейдите к xml. Вы можете определить следующие классы данных (объекты, т. е. экземпляры классов, представляют собой сущность реального мира, в то время как класс больше похож на шаблон / предварительный вариант для объекта):

  • Рецепт (основной класс)
  • Переход
  • Ферментируемый
  • Дрожжи
  • Вода
  • Стиль
  • Оборудование
  • Mash
  • MashStep и так далее.

После того как вы определили классы, которые формируют вашу модель данных (информационное хранилище), определите свойства и поведение каждого класса. Например, Yeast класс будет содержать свойства, Name , Version и так далее. Не беспокойтесь о типе свойства (строка, целое число и т.д.).

Чтобы идентифицировать контроллеры, просмотрите приложение с точки зрения пользователя. Каковы варианты использования (что пользователь делает с приложением? Редактировать? Добавить? и т.д.). Эти варианты использования непреднамеренно потребуют обработки информации в определенном потоке (последовательности). Эта информация доступна в ваших классах моделей. Контроллер будет вызывать операции над классами модели и определять взаимодействие между ними.

Например, предположим, что существует вариант использования, при котором в систему необходимо добавить новый дрожжевой компонент. Затем контроллер создаст новый экземпляр Yeast класса и заполнит его значениями, предоставленными пользователем (после выполнения какой-либо проверки). Затем созданные дрожжи будут добавлены в ListOfAvailableYeasts и станут доступными для других классов.

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

Главный момент здесь заключается в том, что вам следует сначала сосредоточиться на проектировании объектной ориентации, а не переходить непосредственно к шаблонам проектирования.

Если вам нужны некоторые рекомендации о том, как создавать классы из xml, тогда взгляните на xsd.exe инструмент. Вы можете сгенерировать xsd (xml-схему) из xml, а затем использовать этот xsd для создания иерархии классов для xml (я предлагаю вам начать с recipes.xml ). Вы можете модифицировать созданные классы в соответствии с вашими требованиями.

Созданные классы будут выглядеть примерно так,

 /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class RECIPESRECIPE {

    private string nAMEField;

    private string vERSIONField;

    private string tYPEField;

    private string bREWERField;

    private string aSST_BREWERField;

    private string bATCH_SIZEField;
...
}
  

Надеюсь, этого достаточно, чтобы вы начали.