Являются ли методы, которые обновляют несколько объектов, как правило, не частью DAO? - PullRequest
3 голосов
/ 29 мая 2009

Я видел миллион примеров DAO, и по большей части все они реализуют ваши базовые операции CRUD для отдельных сущностей, возможно, с несколькими методами, которые возвращают списки (например, List getCustomers ()).

Однако я никогда не видел пример, в котором есть метод, который обновляет, удаляет или создает несколько объектов, например: void update (List).

Являются ли методы, которые обновляют несколько объектов, как правило, не частью DAO, или они просто не часто используются в примерах? У меня есть требование, по которому я должен выполнить некоторую пакетную вставку, и вызов myDAO.create () сто раз не очень эффективен.

Я просто хочу убедиться, что не пропустил что-то, прежде чем идти вперед и делать то, что кажется очевидным.

Ответы [ 3 ]

2 голосов
/ 29 мая 2009

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

Я согласен, что у DAO, которые я видел, обычно нет методов для создания / обновления / удаления, перегруженных для использования List, но нет причин, почему они не могут.

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

Я бы посоветовал оставить DAO в покое и позволить отдельному уровню обслуживания управлять пакетными операциями. Сервисы владеют логикой транзакций. Это также хорошее место для включения логики «разбивки» большого обновления на части. Это позволяет вам контролировать пакет и поддерживать размер журналов отката.

0 голосов
/ 29 мая 2009

void update(List) должен действовать так же, как void update(Item), только один List будет обновлять несколько элементов. Если нет, то так и должно быть, если только для этого нет особых причин. Затраты на вызов метода не имеют значения, если они делают то же самое.

Например, вызов update(Item) 1000 раз против вызова update(List) 1, и он делает то же самое, что и update(Item) только 1000 раз, что означает, что разница в производительности будет очень небольшой.

0 голосов
/ 29 мая 2009

Я думаю, что примеры не используют это часто. Мои DAO имеют методы для доступа, создания и обновления как отдельных объектов, так и коллекций записей.

...