Представьте, что вы реализуете метод в терминах нескольких других методов:
-(BOOL)sendCachedRequestReturningError: (NSError**)err {
BOOL success = [self readCachedRequestReturningError:err];
if (!success && (*err).domain == MYFileDomain && (*err).errorCode == MYFileNotFoundCode) {
success = [self sendUncachedRequestReturningError:err];
}
return success;
}
Теперь здесь есть 4 пути кода:
success == YES
и все хорошо. readCachedRequestReturningError:
установит err
и установит success == NO
, и вызывающий абонент вызовет presentError:
или что-то еще err
и success == NO
. readCachedRequestReturningError:
установит err
в допустимое значение NSError{MYFileDomain, MYFileNotFoundCode}
, но затем sendUncachedRequestReturningError:
выполнится успешно и установит success == YES
, а не коснется err
вообще, оставив в нем предыдущую ошибку. Если вы теперь проверяете err
вместо проверки возвращаемого значения, вы будете думать, что произошла ошибка, когда все прошло хорошо. Примечание: приведенный выше код сильно упрощен, потому что мы заботимся только об ошибках. Конечно, в реальной программе методы могли бы иметь другой возвращаемый параметр для фактического ответа на запрос или возвращать ответ или nil
вместо success
BOOL
. Это также, вероятно, проверит, является ли err
NULL
. [Тысяча сто двадцать семь]
Это действительно зависит от размера проекта. Нет никакого свойственного значения в наличии отдельного блока "моделей", поскольку Вы можете единица тестировать проект веб-приложения (включая проекты MVC).
Мне нравится иметь отдельные проекты для моей модели, доступа к данным и бизнес-логики. У меня также есть интерфейсы на каждом слое. Это делает тесты с насмешками простыми реализовать, сохраняет мой код организованным и сохраняет мой свет контроллеров. Если бы я поместил все слои в папке моделей, то это не чувствовало бы себя организованным достаточно для меня (просто вещь личности). Мне также нравится иметь опцию выставить веб-сервисы для моих приложений, таким образом, это делает всю ту же логику, модели и доступ к данным доступной для тех сервисов.
Я согласился бы. Если приложение только никогда не будет единственным веб-приложением, я выломал бы его в отдельный проект. Обычно у меня будет фронтэнд веб-приложения, который использует один или несколько сервисов окон для выполнения возвращения, автоматизированные задачи (отправляющий заряды, отправляя уведомления, и т.д.) и один или несколько инструментов консольного приложения для настройки базы пользователей приложения из нашего каталога предприятия - мои приложения обычно являются приложениями интранет, которые могут применяться только к подмножествам нашего всего пользовательского населения. Наличие моделей (слой данных) в отдельном проекте позволяет мне легко совместно использовать его со всеми другими приложениями.
Если Вы, модели являются Доменными Объектами Передачи, то наличие их в sepearate блоке позволит Вам снова использовать их. Если Ваше приложение является простым приложением MVC, и вот и все, или Вы просто делаете его к модульному тесту, это не нужно. Иначе Вы могли:
У Вас есть использование слоя веб-сервиса блок моделей для передачи объектов модели mvc приложению для использования в приложении. Это было бы необходимо при осуществлении не позволяющих веб-приложений, чтобы иметь прямой доступ к базе данных. В этом случае у Вас мог бы быть mvc, который называет веб-сервис, чтобы аутентифицировать и вытянуть данные.
Вы намереваетесь создать другие приложения с помощью тех же моделей, как инструменты управления, которые Вы упомянули.
Я надеюсь, что это помогает. На ноте стороны Вы могли бы хотеть поместить свои "общие" части в Вашу собственную платформу, которая будет включать "модели" (объекты, объекты области, безотносительно имени, которое Вы любите).