Поиск сущностей базовых данных с использованием предикатов - PullRequest
0 голосов
/ 14 февраля 2011

Я пишу приложение для Mac, которое использует Core Data в качестве своего постоянного уровня, и мне любопытно, каково общее согласие с «владением» поисков.

Допустим, у меня есть класс Recipe (сгенерированный подкласс NSManagedObject), и я хотел бы иметь возможность искать, скажем, «Рецепты, содержащие определенный ингредиент», «Рецепты, которые могут кормить более 4 человек», и так далее. Я могу представить себе такие методы, как:

-(NSArray *)fetchRecipesContaining:(Ingredient *)ingredient;
-(NSArray *)fetchRecipesFeedingMorePeopleThan:(int)count;

и реализация знает, как создать соответствующий NSFetchRequest / NSPredicate, чтобы получить их. Вопрос в том, какой объект обычно реализует эти методы? В мире Java они часто живут в экземпляре метода в RecipeFactory. Я также вижу случай использования метода класса в классе Recipe.

В приложении Hello World (которое, как кажется, предлагают большинство учебных пособий) логика встроена непосредственно в вызывающий код, однако я не очень заинтересован в том, чтобы шаблонный код имел дело с NSFetchRequests и NSEntityDescription, разбросанными по всему вызывающему коду. Я действительно предпочел бы абстрагировать эту логику и позволить более значимый API (как указано выше) для извлечения объектов.

Я склоняюсь к методу класса в Recipe (и реализован с использованием категорий, чтобы мне не нужно было изменять сгенерированные классы), но я хотел бы добавить его и посмотреть, что могут использовать другие пользователи Core Data.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2011

Использование категорий. Как вы заметили, это оставляет сгенерированные Xcode классы без изменений, позволяя вам расширить функциональные возможности класса управляемых объектов.

0 голосов
/ 14 февраля 2011

Я использую подход с методами класса.Я не был уверен, хорошо ли это, но у меня еще не было проблем с этим.Также поступил в Cocoa / CoreData из Ruby on Rails с его ActiveRecord - казалось логичным сделать это, потому что он также реализован в библиотеке ActiveRecord.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...