Должен ли хранилище или бизнес-уровень обновлять все таблицы? - PullRequest
0 голосов
/ 27 января 2012

В моем проекте у меня есть таблица «Клиенты» с 3 внешними ключами к таблице «Адреса».Один для MainAddress, один для BillingAddress и один для ShippingAddress.

Я использую шаблон единицы работы и репозитория с CustomerRepository и AddressRepository.

Иногда мне нужно работать с адресами самостоятельно, но большую часть времени они будут частью объекта домена Customers.

Мой вопрос - это вопрос разработки передового опыта.Если уровень бизнес-логики отвечает за вызов и добавление / обновление CustomerRepository и AddressRepository, или если CustomerRepository достаточно умен, чтобы добавлять / обновлять адреса, чтобы BLL требовался только вызов «AddCustomer» или «EditCustomer» и всех таблиц адресовавтоматически добавляются / обновляются?

1 Ответ

1 голос
/ 27 января 2012

Я бы позволил CustomerRepository также обрабатывать обновление адресов. Я предполагаю, что вы используете объектную модель, где объект клиента имеет общую коллекцию адресов, используя отношение «имеет» (то есть у клиента есть адреса). Если вы используете ORM под капотом своего хранилища, оно все равно будет обрабатывать обновление этого объекта и его отношений. Я не вижу смысла в том, чтобы каждый репозиторий обрабатывал отдельные объекты этих отношений или вашу бизнес-логику, необходимую для обработки обновлений этих отношений. Я бы использовал AddressRepository только при работе напрямую с адресами. Это мой совет для этого примера простого отношения "имеет". Будут времена с более сложными отношениями, когда вы захотите, чтобы бизнес-логика обрабатывала это для вас вместо хранилища. Примером может служить случай, когда объекты распределены по разным хранилищам данных.

...