Я пытался сосредоточиться на создании более крупных приложений с использованием рекомендованного подхода MVC, который, похоже, охватывает большинство документов Apple и различных руководств. То есть каждый из вложенных контроллеров имеет собственное представление, и, хотя я его «понимаю», мне это не обязательно нравится - в моем конкретном приложении у меня есть иерархия представлений (и контроллеров), которая теперь состоит из нескольких классов. Например, главный контроллер / представление -> боковая панель -> верхняя половина боковой панели (NSSplitView в NSView) -> NSTableView.

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

Я также поиграл с идеей, которую предложил друг, одноэлементной службой. По сути, это оболочка для любой модели данных или «вещи», которая может понадобиться моим контроллерам, в моем случае EKEventStore, который отображает свойство NSArray и отправляет уведомления (в основном потоке). Пока этот подход, кажется, ведет меня к более чистому коду и, безусловно, упрощает модульное тестирование (я думаю), но мне интересно, не придерживаюсь ли я своего подхода.

Кто-нибудь использовал этот подход раньше с большими приложениями? Есть ли какие-нибудь подводные камни или мины, на которые я собираюсь наткнуться? Я понимаю, что во многом это стиль / предпочтения, но мне любопытно, если я пойду по плохому пути.

0
XeroxDucati 23 Фев 2014 в 06:32

1 ответ

Лучший ответ

Ваш синглтон просто хранит коллекции объектов для использования или также содержит изменяемое глобальное состояние? Для создания экземпляров объекта и простого тестирования вам следует взглянуть на реализацию DI, например Objection. Для тестового имитации ознакомьтесь с OCMock.

Используя Objection, вы можете внедрить DataModelService в любой контроллер, которому, например, нужен доступ к модели данных.

0
mdatwood 23 Фев 2014 в 06:46
Я не совсем уверен, назвал бы я это изменчивым глобальным состоянием или нет. Я сбросил пример, с которым играю здесь; gist.github.com/japhar81/618a732194afa0262f48 Я смотрел возражение, но продолжаю чтение того, что DI в Objective-C контрпродуктивно, поскольку он в основном предназначен для того, чтобы не нуждаться в нем .. (например: stackoverflow.com/questions/309711/…) Это не так?
 – 
XeroxDucati
23 Фев 2014 в 07:23
Ваш пример - это то, что я сделал без такой структуры, как возражение. Что касается того, что DI не нужен, я думаю, что это нужно решать в индивидуальном порядке (также DI отличается для разных людей). В вашем конкретном примере, на мой взгляд, синглтонами легче управлять с помощью DI.
 – 
mdatwood
23 Фев 2014 в 19:36