2

Я знаю, что данные ядра не следует рассматривать как ORM, но он по-прежнему предлагает функциональность, похожую на ORM. Просто любопытно, реализует ли он карту данных? Я знаю, что «Data Mapper - это слой программного обеспечения, который отделяет объекты в памяти от базы данных. Его обязанностью является передача данных между ними, а также их изолирование друг от друга». (Мартин Фаулер). Диспетчер контекста IMHO обрабатывает весь SQL-материал в одну транзакцию, поэтому очень эффективный дизайн и основные данные IMHO можно рассматривать как реализацию шаблона карт данных.Являются ли основные данные реализацией шаблона карт данных?

ответ

1

Год последней, я буду способствовать мои два цента

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

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

Основные данные загружают много метаинформации о вашем графике объектов и создают для них некоторую структуру. Хотя вы можете изменить постоянный магазин и испечь что-то свое, у вас будет много ограничений на то, как это сделать, с явным «реляционным» чувством к нему.

Идея хорошая, мы можем сказать, что это ее вариация. Мне нравится то, что операция сохранения выполняется контекстом, а не самим объектом. Таким образом, существует некоторый тип разделения.

Однако посмотрите на такие функции, как «awakeFromFetch» ​​или «didSave», обе операции связаны с хранилищем данных, а не с обычным доменным объектом. Правильный шаблон Data Mapper позволит вам определять эти операции для каждого постоянного хранилища, а не унифицировать его в одном объекте.

UPDATE:

достаточно смешной один день после моего ответа, я должен был иметь дело со старым проектом на основе CoreData и должен вернуться, чтобы улучшить этот ответ. Чтобы все было ясно, я считаю, что «похоже на образец» недостаточно. Например, реализация шаблонов фасадов и адаптеров очень похожа, но вы называете их по-разному в зависимости от того, как вы их используете.

Является ли Core Data реализатором данных?

Должен сказать, что мой «не совсем» должен был быть «определенно нет»!

Я просто очень рассердился, потому что мне нужно было переименовать некоторые поля, а затем добавить новые. Хотя я хорошо знаю, как работают автоматические миграции с Core Data, я забыл, насколько это раздражает.

Сколько раз вам нужно какое-то новое поле, переименовать что-нибудь, экспериментировать, пока не получите его правильно .... и для каждого маленького изменения требуется полная перемена базы данных? С помощью Data Mappers это никогда не происходит, потому что объекты домена отлично развязаны. Вы только касаетесь базы данных, чтобы догнать объекты домена после завершения какой-либо новой функции. Core Data заставляет вас каждый раз связывать каждую деталь ваших объектов домена.

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

+0

Прослушивание [последнего эпизода подкаста Ruby Rogues] (http://instaca.st/b/bfe), о [Ruby Object Mapper] (https://github.com/rom-rb/rom) , Я обнаружил, что задаю тот же вопрос. Вы правы, что Core Data не реализует Data Mapper, но я думаю, что NSManagedObjectContext определенно реализует [Unit Of Work] (http://martinfowler.com/eaaCatalog/unitOfWork.html). –

Смежные вопросы