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

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

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

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

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

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

UsageEvent :

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

InstallationEvent :

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

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

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

Мне нужен способ установить или каким-то образом получить доступ к sqlite3 в оболочке adb. У меня есть

Я попытался найти ответ, но закрыл мое устройство: Почему я получаю ошибку «sqlite3: not found» на Nexus One с рутированным доступом, когда я пытаюсь открыть базу данных с помощью оболочки adb?

Но я не думаю, что это хорошая идея подталкивать мои окна sqlite3. exe в системе Linux?

Так можно ли как-нибудь установить браузер терминала sqlite3?

[РЕШЕНИЕ]

Из различных комментариев и некоторых вопросов на # android-dev (irc) я нашел решение. Сначала я скопировал файл базы данных на свой рабочий стол. Но сначала мне пришлось установить BusyBox, потому что cp не включен?!? После этого я столкнулся с проблемой, что я не мог тянуть или нажимать откуда угодно, кроме / sdcard /. Тогда я мог бы использовать / sdcard / в качестве «промежуточной станции» и тянуть / толкать мой БД.

Тогда я вымотался! Мне действительно пришлось изучить мой терминал sqlite. Тогда у меня возникла идея запустить эмулятор, вытащив двоичный файл sqlite из / system / xbin / sqlite3. Затем перемонтируйте / system с помощью rw:

# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system

и вставьте sqlite в / sdcard /, а оттуда скопируйте его в / system / xbin /

Теперь он работает: D

15
задан Community 23 May 2017 в 12:10
поделиться