Запрос на выборку должным образом принадлежит отдельным контроллерам в шаблоне Model-View-Controller.Выборка возвращает конкретную информацию в определенном порядке, требуемом для каждого отдельного представления.Каждый выбор настраивается для нужд каждого конкретного представления.Таким образом, помещение всех выборок приложения в один объект нарушит инкапсуляцию, а не улучшит ее.Только извлеченные свойства и извлеченные отношения принадлежат самой модели данных.
Контекст управляемого объекта выполняет функцию объекта данных в простых приложениях.Он реализует все функции, необходимые для получения и извлечения информации из стека базовых данных, например - objectWithID:
.В большинстве случаев все, что вам нужно сделать, это передать контекст контроллерам и позволить им настроить выборки для него.
Если ваше приложение большого размера или имеет несколько контекстов, вы всегда можете заключить контекст / ы в собственный класс менеджера с различными средствами доступа и удобными методами, чтобы сделать операции с базовыми данными более плавными.Вы можете законным и безопасным образом реализовать класс менеджера как единое целое, чтобы упростить доступ к нему в любом месте приложения.
Редактировать:
Код выглядит хорошо, за исключением изменяемой копии.Это бессмысленно и приведет к утечке памяти.Массив entities
необходим только для одной строки, и это является автоматическим выпуском.Хранение объектов Client
управляется контекстом.Вы должны проверить ошибку и, по крайней мере, зарегистрировать ее для отладки.
Вы хотите избежать "get" и "set" для имен методов, которые не являются средствами доступа.Среда выполнения ищет методы, которые начинаются с «get» и «set» для поиска методов доступа.По соглашению все имена методов начинаются со строчной буквы.Возможно, вы захотите сделать имя метода более описательным, чтобы оно автоматически комментировалось, когда вы читаете его в будущем.
Итак:
[theCoreDataDal GetClient:vaugelyNamedString];
до
[theCoreDataDal clientWithClientID:vaugelyNamedString];
Проблема, с которой вы столкнетесь при попытке втиснуть все в один объект, состоит в том, что выборки обычно уникальны инастроен для нужд конкретного интерфейса.Более того, вы обычно начинаете с выборки, чтобы найти конкретные объекты, но затем вы проводите остальное время, гуляя по отношениям, основанным на неизвестном вводе, до времени выполнения.
Базовые данные - это уровень доступа к данным.Большая часть кода, который вы пишете для Core Data, на самом деле является кодом контроллера.Нет ничего концептуально проблемного в этом GetClient
методе, кроме как часто вы собираетесь выполнять эту конкретную выборку?
Когда я создаю объект Data Model Manager, я использую его в основном для хранениякод котельной плиты.Например, хотя каждый запрос на выборку уникален, все они начинаются одинаково с описанием сущности, поэтому я автоматически генерирую методы для возврата базовой выборки для каждой сущности и помещаю ее в менеджер.Тогда у меня есть другой метод котельной пластины, чтобы фактически выполнить выборку.При использовании контроллер запрашивает у менеджера объект выборки для конкретной сущности.Контроллер настраивает выборку и затем отправляет ее обратно менеджеру, чтобы выполнить выборку и вернуть результаты.
Все котельные находятся в диспетчере, а все настроенное - в контроллере.