#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;
...
}
Надеюсь, этого достаточно, чтобы вы начали.