Подтвердить что ты не робот

Может ли DAO называть DAO?

У меня есть компонент, который должен обновлять базу данных для клиента и адреса клиента (через JDBC). Уместно ли вызывать CustomerAddressDAO из CustomerDAO? Или создать отдельный компонент CustomerDataManager, который вызывает их отдельно?

4b9b3361

Ответ 1

Вы можете это сделать, но это не значит, что вам нужно. В этих случаях мне нравится использовать Сервис (CustomerService в этом случае), который имеет вызов метода, который использует оба DAO. Вы можете определить транзакцию вокруг метода службы, поэтому, если один вызов не удался, они оба откатываются.

Проблема с DAO, которая вызывает другие DAO, - это вы быстро получите круговые ссылки. Инъекционная инъекция становится намного сложнее.

Ответ 2

Вы можете вызвать один DAO из другого, а также рассмотреть возможность создания CustomerAddressDAO в CustomerDAO (в конце концов, это о клиенте, и я не думаю, что вы хотите иметь адрес клиента без клиента).

Ответ 3

Очевидно, вы можете сделать это по-разному. Но, чтобы правильно ответить на этот вопрос, вы должны начать с вашей модели. В модели смотрите, если Address является Entity (что-то с его собственным идентификатором и используется также независимо), или это тип значения (что имеет смысл только в контексте Клиента). Тогда у вас будет два случая:

  • Адрес - это объект: В этом случае адрес имеет собственный Дао, а у Клиента есть собственный Дао. Ни Дао не должны обращаться к другому. Если есть некоторая логика, которая должна управлять этими двумя, то это должно быть в вашей логике приложения, а не в Уровне доступа к данным.

  • Адрес - тип значения, связанный с клиентом: В этом случае адрес не имеет отдельного DAO. Он сохраняется/восстанавливается как часть содержащего объекта Customer.

Заключение: если они правильно разработаны, DAO не имеют доступа друг к другу (в стандартных ситуациях).