Постоянство Дизайн Общие вопросы - PullRequest
2 голосов
/ 04 октября 2011

Я пытался учиться сам, но вскоре начал понимать, что к концу бесконечных книг я буду знать все вещи низкого уровня @Entity и т. Д., Даже не понимая верхнего уровня.


Итак, мое понимание:

  1. Обычно мы объявляем интерфейс DAO, в котором мы определяем все методы для работы с моделью предметной области.
  2. Во-вторых, мы пишем модель предметной области для представления сущности в базе данных.
  3. Мы пишем класс реализации DAO, который может использовать Hibernate, JPA, JDBC или любые другие чудеса, которые у нас есть, и который реализует наш интерфейс DAO.

(полное соединение с Spring)


Мои вопросы, относящиеся к пунктам выше:


Мы пишем один интерфейс DAO для каждой доменной модели? Если у нас есть междисциплинарное поведение, в котором участие включает более одной доменной модели, мы объявляем новую пару интерфейс-реализация DAO и называем это соответственно? Например: «Заказы клиентов со склада проверяют наличие товара» -> подтверждает, если он есть «куда это пойдет?


Как Hibernate взаимодействует с MVC? Есть ли какие-то важные аспекты, о которых следует знать?

В книге я заметил:

Переопределение Equals и Hashcode

"В простом сценарии Hibernate может поддерживать эквивалентность объектов, не требуя каких-либо специальных изменений для самих объектов домена. Однако, если ваше приложение требует добавления объектов в коллекции Java, таких как java.util.Set, или вы Если вы планируете работать с отсоединенными объектами, вам, вероятно, потребуется переопределить методы equals () и hashCode () по умолчанию для ваших доменных объектов "

Может быть, я не очень хорошо понимаю, что такое отдельные сущности? Это те, которые мы вынули из контекста Hibernate - фактически просто коллекции классов?

Что я хочу, так это безопасно выполнять Hibernate и затем вернуть мне модель, которую я передам сервлету и которая передаст ее соответствующему представлению. Мы извлекаем эту модель с помощью простого возврата из методов класса DAOimpl или это несколько сложно?


Если я собираюсь сделать уровень персистентности без ORM-фреймворка, просто с простым JDBC, какие у меня проблемы? Я слышал, что в Hibernate есть какой-то умный сеанс, который обрабатывает параллельные запросы, так что будет с JDBC?


Где находится бизнес-логика? Это DAOimpl классы?


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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 октября 2011

Мы пишем один интерфейс DAO для каждой доменной модели? Если у нас есть междисциплинарное поведение, когда участие включает более одного Модель предметной области мы объявляем новой парой DAO интерфейс-реализация и вызываем это соответственно? Как пример: «Заказы клиентов со склада, чеки со склада Доступен ли пункт -> подтверждает, если он "куда это пойдет?"

Ты мог бы сделать это. Возможно, более простым способом было бы, чтобы Служба управляла вызовами DAO. Если вы используете Spring, вы можете определить границы транзакции для методов службы, поэтому все методы DAO будут участвовать в одной транзакции. Таким образом, ваши DAO остаются специфичными для своих соответствующих моделей, и в теории проще. Помните, что когда DAO сбрасывает сеанс, все изменения помещаются в базу данных. Так что, если у вас есть модели User и Profile, и они соответствующим образом отображаются в спящем режиме, если вы создадите экземпляр каждого и вызовете сброс сеанса, они оба будут сохранены.

Этот подход привлекателен, потому что DAO должны делать одну вещь - выполнять постоянные операции. Если вы начинаете создавать сложные DAO, вы можете инкапсулировать бизнес-требования вашего приложения в уровне постоянства, чего вы не хотите делать. Сервисы - это место, где можно заказать постоянные операции для реализации бизнес-требований.

Как Hibernate взаимодействует с MVC? Есть ли важные аспекты быть в курсе?

MVC - это парадигма. Контроллер модельного вида. Цель состоит в том, чтобы определить четкие проблемы в вашем приложении, чтобы отдельные компоненты могли сосредоточиться на одной вещи. Например, объект Model не должен сообщать представлению о том, как визуализировать себя. Hibernate - это постоянная реализация ORM. Код гибернации - это один из способов сохранения объектов модели. MVC и hibernate очень мало связаны друг с другом, вы можете иметь MVC в приложении и не иметь Hibernate, или Hibernate в приложении и не иметь MVC.

Может быть, я не очень хорошо понимаю, что такое отдельные сущности? Это те, которые мы вынули из контекста Hibernate - эффективно просто коллекции классов?

Из документации"Отсоединено - отсоединенный экземпляр - это постоянный объект, но его Сессия закрыта."

Отдельные экземпляры могут быть сохранены позже, но их необходимо повторно связать с сеансом.

Если я хочу сделать уровень персистентности без ORM, просто с простым JDBC, какие у меня проблемы? Я слышал, что Hibernate имеет некоторые умные сеанс, который обрабатывает параллельные запросы, так что будет с JDBC?

Основным недостатком является то, что вам необходимо преобразовать результаты jdbc в объекты, если ваше приложение использует объекты для представления сущностей. Вы также должны написать sql. Использование jdbc - неплохая идея. ОРМ это варианты. JDBC это еще один вариант. Вы также можете смешивать и сочетать, но это может быть сложно. Параллельные запросы в ваше приложение не должны быть проблемой вашего уровня персистентности. Просто убедитесь, что ваши DAO не сохраняют никакое состояние (то есть используют статические переменные), и у вас все будет хорошо.

Где находится бизнес-логика? Это DAOimpl классы?

Это комбинация модели вашего домена и ваших услуг. Как уже упоминалось, если вам нужно сохранить вещи по порядку, то можете перейти в сервис. Если у вас есть требование, что некоторые поля должны быть ограничены некоторыми значениями, это может быть в самой модели. Это НЕ в DAO - они должны справляться с настойчивостью.

1 голос
/ 04 октября 2011

Я удалил слой dao из моего веб-приложения spring / hibernate - мне это показалось ненужным.На самом деле я не могу представить, из чего они состоят сейчас.Но это кажется в некоторой степени дискуссионным .

Для переопределения equals и хэш-кода в спящем режиме я обычно использую сгенерированный db автоматический идентификатор, опять же, это несколько дискуссионный .До тех пор, пока вы знаете, что идентификатор присутствует только после первого сохранения в БД, проблем не возникает.

Где находится бизнес-логика?

Вкл.ваши объекты домена / гибернации объекты - это меньше противоречивым 1019 *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...