Data Mapper API - не уверен насчет организации - PullRequest
7 голосов
/ 07 июля 2010

Допустим, у нас есть классы моделей "Пользователь" и "Отель".Я бы использовал User_Mapper и Hotel_Mapper для загрузки / сохранения / удаления и т. Д. Затем я хочу, чтобы пользователь мог отмечать свои «любимые» отели.В базе данных у меня есть таблица user_favourite_hotels, которая представляет собой простую таблицу ссылок и, скажем, поле для подписки на обновления отелей.

При перечислении любимых отелей пользователя, как бы вы ожидать, что это будет работать с точки зрения API?Часть меня думает, что это должен быть метод "findFavouritesByUserId" в Hotel_Mapper, но кроме того, что он говорит, что он "чувствует себя правильным" - однако коллега предполагает, что "избранное" принадлежит пользователю и поэтому должно быть в User_Mapper.

Возможно, у меня должен быть User_Hotel_Favourites_Mapper?Я думал о включении «избранных» данных в объект User, чтобы они сохранялись и загружались всякий раз, когда объект User является.Однако я не уверен, что было бы лучше разделить его на его собственный объект и картограф.

Буду признателен за любые советы о том, как лучше настроить API для вышеперечисленного и любые плюсы /минусы / переживания.

Большое спасибо,

Джеймс.

Ответы [ 3 ]

2 голосов
/ 21 февраля 2011

Это (по общему признанию, вышедшее на пенсию) руководство по шаблонам и практикам для разработки компонентов уровня данных предполагает, что вы помещаете метод в отображение типа объекта, который вы получаете от вызова.

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

Итак, в вашем примере он будет отображаться в Hotel Mapper каквозвращается отели.

1 голос
/ 10 мая 2011

Если вы хотите сохранить любимые отели для пользователя, вы используете UserMapper, который замечает, что объект домена для User изменяет избранное, и обновляет обе таблицы для пользователей и для user_favorite_hotels (вам просто нужен отельИдентификаторы).

При поиске любимых отелей некоторых пользователей вы используете HotelMapper и устанавливаете фильтр на основе User, поскольку вы будете работать с экземплярами Hotel.

0 голосов
/ 31 января 2013

Учитывая, что это было задано более 2 лет назад, я не уверен, имеет ли значение ответ для вас сейчас. Но вот что я думаю в любом случае.

Если User может иметь несколько типов избранного (включая Hotel s), может иметь смысл иметь абстракцию UserFavourites, чтобы охватить все возможные типы избранного. UserFavourites может предоставить метод getItems() для получения основного избранного.

Это можно сделать с помощью класса менеджера, который возвращает соответствующий объект Favorites (например, FavouriteHotels), для которого можно вызвать метод getItems().

...