Основные данные реализуют шаблон отображения данных? - PullRequest
2 голосов
/ 11 января 2012

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

1 Ответ

1 голос
/ 22 апреля 2013

Через год я внесу свои два цента

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

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

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

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

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

UPDATE:

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

Core Data реализует преобразователь данных?

Я должен сказать, что мое "не совсем" должно было быть "определенно нет!"

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

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

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

...