Я пишу приложение для 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.
Спасибо.