2013-06-15 2 views
1

Я получил кросс очень хороший учебник калькулятора для Objective C/iOS. Я тоже долго об этом думал и был удивлен, как это было реализовано. Это очень мило и элегантно.Дилемма реализации калькулятора iOS: как и где создать стек калькулятора

Вначале учебник устанавливает файлы calculatorbrain.h и calculatorbrain.m, предназначенные для отслеживания стека калькулятора, а также методы обработки операций в этом стеке.

Затем он объявляет переменную экземпляра @property этого класса calculatorbrain для viewcontroller.

Мои вопросы, кажется, есть много способов реализовать это. Почему так лучше?

1) Простой альтернативой, казалось бы, было бы просто объявить методы стека и стека в контроллере представления. 2) Вместо того, чтобы объявлять его как @property, почему бы просто не создать экземпляр калькулятора в контроллере представления.

В чем преимущества и недостатки трех способов? Какой объективный принцип программирования послужит ориентиром в выборе того, какой путь предпочтительнее?

Спасибо.

ответ

2

Как правило, хорошо отделить логику от интерфейса.

Например, если вы решили создать еще один ViewController и сделать переход к нему из исходного, и вам нужны ваши расчетные данные (например, если вы хотите нарисовать график), вы просто пройдете ваш калькулятор ко второму ViewController.

Подробнее о шаблонах проектирования, используемых в каркасе Cocoa (эти же принципы применяются к Cocoa Touch), можно найти здесь: Cocoa Design Patterns.

Вот учебник Apple, который обеспечивает очень продуманный, но простой пример шаблона приложения MVC: Your second iOS app

И вы можете найти в Интернет для получения дополнительной информации о MVC (Model-View-Controller) ,

+0

Да, чтение очень полезно. Спасибо. Я сомневаюсь, что я бы это понял, хотя сначала не изучал учебники. – boobami

+0

Я пытаюсь найти Руководство по реализации объекта модели, упомянутое в статье шаблона дизайна какао, но получившее сообщение «страница не найдена». Это устарело или это где-то в другом месте? – boobami

+0

Я рад, что это помогло :) Что касается руководства, к сожалению, я не читал этого, и я не знаю, почему Apple его удалила. Я нашел его через google на сайтах третьего уровня. Он датирован 2010 годом, поэтому, возможно, он просто устарел сейчас. Вы можете ознакомиться с учебным пособием Apple «Your second iOS App». Он представляет собой продуманный, но простой пример приложения patern MVC. Я добавлю ссылку на ответ. И на самом деле документация Apple действительно замечательная. И в нем есть статьи для программистов с разным профессиональным уровнем. Так что посмотри :) – FreeNickname

3

«Существует не один способ сделать это».

Хотя это специально не кодифицировано в UIViewController, один общий шаблон является то, что модель (независимо от того, что это) получает толкнула в контроллеры просмотра (например, NSViewController «s representedObject свойства.) В эти дни, идиоматический способ сделать это было бы возможно, будет с @property, как это:

@interface MyViewController : UIViewController 

@property (assign) MyCalculatorModel* model; 

@end 

в эти дни, с ARC и автоматического синтеза собственности, вам не нужно указать базовую переменную экземпляра, так что это все, что вам действительно нужно сделать. Затем, когда вы создаете контроллер вида (предположительно в классе делегирования приложения или каком-то другом контроллере уровня приложения), контроллер, ответственный за создание контроллера представления, подталкивает к нему модель с использованием свойства. (Обратите внимание, что также должно быть установлено свойство nil, прежде чем выпустить контроллер просмотра при отключении.)

Ваш вариант № 1 менее желателен, поскольку он соединяет код без просмотра с кодом, специфичным для просмотра.Ваш вариант №2 менее желателен, потому что это означает, что диспетчер представлений несет ответственность за то, чтобы каким-то образом получить модель и поместить ее в собственную переменную частного экземпляра, что, возможно, является инверсией управления. (то есть вы предпочли бы для чего-то внешнего контроллера представления нажать модель, но это невозможно, потому что переменные экземпляра являются закрытыми по умолчанию)

+0

Извините, я не слишком хорош в ARC. Должны ли мы действительно использовать 'assign' в этом случае? Поскольку это не делегат, и нам может понадобиться этот объект в будущем, я бы сохранил его. Так что с ARC это будет «сильным», я считаю. Что мне здесь не хватает? – FreeNickname

+0

Итак, если я правильно понимаю, разделение задачи заключается в том, чтобы позволить viewcontrollers делать все, что связано с представлением, но позволяло каждой модели обрабатывать логику и результаты, которые ViewController использует для отображения? – boobami

+0

Можете ли вы объяснить «инверсию контроля», термин звонит в колокол, но я не уверен, правильно ли я его понимаю. Благодарю. – boobami

Смежные вопросы