Как использовать объектно-ориентированное программирование с Hibernate?

При использовании инструментов ORM, таких как Hibernate, я обнаружил, что выгодно не допускать всей бизнес-логики в мои бизнес-объекты и вместо этого хранить ее на уровне обслуживания. Уровень обслуживания создает POJO бизнес-объекта, манипулирует ими и использует DAO для их сохранения. Но разве Это в каком-то смысле шаг назад от объектно-ориентированной природы Java?

Мой стек включает Spring с Hibernate для DI, транзакций и сохраняемости. Мои DAO внедряются в мой уровень обслуживания, а не в какие-либо объекты POJO.

Недавно я прочитал документ Мартина Фаулера по шаблонам бухгалтерского учета о создании гибких систем учета. Я считаю, что он был написан до повального увлечения Spring / Hibernate / DI / ORM. Он описывает объекты, содержащие бизнес-логику. Эти объекты используют наследование и композицию элегантными способами, которые имеют смысл.

Помещая логику в классы, ее можно разделить на аккуратные блоки, относящиеся только к одному конкретному сценарию. В моем сервисном слое у меня есть множество разных методов, каждый из которых имеет дело со своим сценарием. Но это далеко от объектно-ориентированного подхода.

У Мартина Фаулера ' В документе о шаблонах бухгалтерского учета он описывает базовый класс AccountingEvent . У этого класса могут быть подклассы, такие как UsageEvent и InstallationEvent .

UsageEvent :

  • UsageEvent происходит, когда считыватель счетчиков записывает ваше потребление электроэнергии.
  • Выполняется поиск соглашения об обслуживании клиента
  • Соответствующее Правило публикации указаны в соглашении об обслуживании для этого типа событий и для этого конкретного периода времени. Правила и скорость могут меняться со временем, поэтому для любого типа событий существует несколько PostingRule .
  • UsageEvent и PostingRule определяют, какие действия необходимы для выполнения, например, создание одного или нескольких объектов AccountingEntry .
  • Создается AccountingEntry для выставления счетов за использование с логикой, содержащейся в PostingRule . Это может быть так же просто, как использование ставки * , но, вероятно, гораздо сложнее, в зависимости от времени суток, уровней обязательств (крупные предприятия могут получать скидки), домохозяйств с низким доходом и т. Д.
  • Дополнительно AccountingEntry создаются для выставления счетов за налоги, предоставления кредитов и т. Д.

InstallationEvent :

  • InstallationEvent происходит, когда технический специалист включает питание здания.
  • Соглашение об обслуживании и PostingRule найдены
  • Созданы соответствующие AccountingEntry s
  • Используется гораздо другая логика и правила, чем в UsageEvent

Дело в том, что существует множество различных типов AccountingEvent и PostingRule s, каждый из которых точно знает, что делать в конкретной ситуации. Эти объекты легко взаимозаменяемы с помощью интерфейсов. Я могу избавиться от всего, просто введя команду someAccountingEvent.process () .

Я не знаю, как лучше всего вернуть эту элегантность, когда мне нужно создавать и сохранять объекты в уровень обслуживания. Я не хочу внедрять свои DAO в свои POJO, что добавило бы к ним дополнительных зависимостей и потенциально сделало бы их гораздо более тяжелыми объектами. } который я могу использовать для фильтрации такого массива: $ arr = array (7, 8, 9, 10, 11, 12, 13);

Я не уверен, что в MySQL Workbench есть функция автозаполнения, такая как SQLyog (см. Снимок экрана).

enter image description here

Итак, если MySQL Workbench действительно имеет функцию intellisense или автозаполнение, то как я могу их?

Есть ли способ заставить MySQL Workbench автоматически завершаться так же, как это делает Sqlyog?

19
задан Jacob 17 July 2012 в 11:59
поделиться