Как вы должны обрабатывать родительские и дочерние объекты в шаблоне хранилища? - PullRequest
5 голосов
/ 13 августа 2011

Я работаю над созданием сайта с изображениями, и мне интересно, как мне структурировать методы Create / Update в моем хранилище Linq to Sql?

У меня есть объект Photo, структурированный как:

public class Image
{
    public int ID { get; set; }
    public int OwnerId { get; set; }
    public string Url { get; set; }
    public IEnumerable<Tag> Tags { get; set; }
}

У меня есть следующие таблицы: Изображения, Теги, ImageTag

Теперь мне интересно, когда я вызываю свой метод CreateImage в моем ImageRepository, я должен также создавать Теги вТаблица тегов и создание сопоставлений в таблице ImageTag?

Аналогичным образом, когда я вызываю UpdateImage, должен ли я проверять, изменились ли теги, и не имеют ли они затем удаление записей в таблице ImageTag и добавление в разныеиз них (а также, возможно, добавление новых тегов в таблицу тегов)?

Или оба этих варианта использования должны выполняться в отдельном вызове репозитория?

По сути, как обрабатывается это отношение родитель-потомок, один ко многим, обычно в типичном хранилище linq to sql?

1 Ответ

2 голосов
/ 14 августа 2011

Я бы сказал, что хранилище не несет ответственности за понимание отношений между сущностями в вашей модели. В конце концов, если вы захотите изменить способ сохранения ваших данных (например, на решение no-sql, или даже если вы просто измените свою схему БД), ваши сущности и ваша модель не должны измениться.

Таким образом, ваш лучший выбор - иметь отдельные вызовы репозитория и заключать вызовы в единицу работы. (A Единица работы является в основном абстрагированной транзакцией).

Ваша единица работы и различные обращения к хранилищу будут слоем абстракции над хранилищем. Я не знаю остальную вашу модель, так что это могут быть разные вещи. Это может быть метод объекта Image. Вы можете иметь Mediator . Или, если вы подходите к этому с точки зрения DDD, доменная служба.

Приветствие.

...