2013-04-16 3 views
2

Я читаю Java EE Tutorial и here я вижу это предложение в начале:Что такое объект persistence?

Объект представляет собой легкий объект домена настойчивости.

Я искал инерционность объекта но не смог найти четкое объяснение.

Что такое постоянный доменный объект?

+0

Связанный: [Бизнес-объект] (http://en.wikipedia.org/wiki/Business_object), который технически известен как [Объект домена] (http://stackoverflow.com/q/10394667/1065197) и [ Объект домена сохранения] (http://stackoverflow.com/q/9735914/1065197). –

+0

легкий вес означает, что он доступен вне контейнера JEE (JPA). означает, что вы можете использовать его с любым приложением J2se (tomcat, spring или standalone java app и т. д.). Это связано с тем, что базовая реализация часто предоставляется автономной структурой ORM, такой как спящий режим. В этом случае вы будете использовать «управляемый приложением EntityManager» и не сможете использовать распространение транзакционного контекста. (за исключением случаев использования весны, которая играет роль контейнера jee) – Gab

ответ

7

Java EE предполагает что-то, называемое Domain Model. Модель домена состоит из объектов, представляющих объекты, где Entity - это то, что имеет идентичность, относящуюся к бизнесу. (Например, если вы работаете в банке, ваш домен может включать такие вещи, как учетные записи, клиенты, холдинги и займы).

Вот цитата из Бауэра и король Java Persistence с Hibernate, описывающая моделью домена:

3.1.1. Анализ бизнес-домена

Урок разработки программного обеспечения начинается с анализа проблемы домен (подразумевается, что кода устаревшего кода или старой базы данных уже нет ).

На этом этапе вы с помощью экспертов проблемной области определите основные объекты, имеющие отношение к программной системе. Субъекты , как правило, понимают пользователи системы: оплата, клиент, заказ, товар, ставка и т. Д. Некоторые объекты могут быть абстракциями менее конкретных вещей, о которых думает пользователь, например, алгоритм ценообразования , но даже они обычно могут быть понятны пользователю . Все эти объекты находятся в концептуальном представлении бизнеса , который мы иногда называем бизнес-моделью. Разработчики и архитекторы объектно-ориентированного программного обеспечения анализируют бизнес-модель и создают объектно-ориентированную модель, все еще на концептуальном уровне (нет Java-код). Эта модель может быть такой же простой, как мысленный образ, существующий , только в разуме разработчика, или может быть такой же сложной, как диаграмма классов UML , созданная при помощи программного обеспечения автоматизированного программирования (CASE) , такого как ArgoUML или TogetherJ. Простая модель, выраженная в UML, равна , показанной на рисунке 3.1.

Эта модель содержит объекты, которые вы обязательно найдете в любой обычной аукционной системе : категория, элемент и пользователь. Объекты и их отношения (и, возможно, их атрибуты) представлены в этой модели проблемной области. Мы называем это объектно-ориентированной моделью объектов сущностей из проблемной области, охватывающей только те объекты, которые представляют интерес для пользователя, модель домена. Это абстрактное представление реального мира .

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

В идеале (в подходе называется Domain-Driven Design) эти объекты домена имеют 2 функцию: они не знают о проблемах инфраструктуры, как настойчивость или сделки, и они содержат логику реализации переходов состояний, которые возникают, когда они манипулируют во время обработки бизнеса; комбинация этих средств означает, что бизнес-логику можно тестировать отдельно от инфраструктуры. В реальном мире более типично видеть anemic domain objects, которые не содержат никакой бизнес-логики, а бизнес-логика заканчивается в transaction scripts.

В любом случае идея заключается в том, что у вас есть модель домена, состоящая из постоянных объектов. Существует некоторая конфигурация (аннотации или файлы XML или что-то еще), которые сопоставляют сущности и их атрибуты с таблицами и столбцами в базе данных и которые сопоставляют отношения между сущностями. Существует объектно-реляционный сопоставитель (JPA является стандартом для реализации ORM, Hibernate - одна из таких реализаций), которая знает, как преобразовывать данные вперед и назад между представлением базы данных и представлением объекта-графа, чтобы разработчик мог манипулировать объектами вместо этого строк базы данных.

Для людей, которые утверждают, что бизнес-логика не должна быть частью модели домена, вот еще одна цитата из Java Persistence с Hibernate книги, в разделе 3.1.2:

Сущности в модель домена должна инкапсулировать состояние и поведение. Например, пользовательский объект должен определить имя и адрес клиента и логику, необходимую для расчета стоимости доставки для элементов (данному конкретному клиенту). Модель домена - это богатый объект модели со сложными ассоциациями, взаимодействиями и наследованием . Интересное и подробное обсуждение объектно-ориентированных методов работы с моделями доменов можно найти в «Шаблонах архитектуры корпоративных приложений» (Fowler, 2003) или в области управления доменами (Evans, 2003).

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

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

+0

Я понимаю значение этого ответа через 4 года. Спасибо, отличный ответ! –

0

Состояние объекта Domain.

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

Для примера см состояния объектов здесь, в Java ORM framework hibernate

отречение: это только за идею.

+3

Если это цитата, пожалуйста, отправьте исходное место, где вы ее нашли. –

+1

Что такое объект домена? –

+0

@LuiggiMendoza см. Ссылку на фреймворк hibernate –

2

Я просто добавлю этот ответ, связанный с another question of Koray Tugay.

В Java EE JPA сущность обычно является компонентом, управляемым контейнером JPA. Этот контейнер предоставляется на любом сервере приложений, сертифицированном на Java EE.

Каждый объект Объект представляет собой представление в памяти состояния одной или нескольких таблиц в экземпляре РСУБД. Каждое изменение состояния объекта managed в транзакции будет автоматически обработано контейнером и отображено как заказ sql, выполняемый в отношении базы данных. Таким образом, вам не нужно заботиться о постоянной части вашей модели домена. Просто измените состояние соответствующих объектов Java (объектов), и оно будет автоматически отражено в базе данных. (Конечно, это не магия и приходит со своими ловушками.)

Каждый объект является частью persistence unit связанной с datasource, для которого предусмотрен пул соединений.

Единица измерения настойчивости управляется многими EntityManager экземплярами. EntityManager отвечает за управление представлением в памяти всех объектов связанного persistence unit; По крайней мере те, которые в настоящее время загружаются из базы данных. У вас обычно есть один экземпляр EntityManager для каждой темы (~ на запрос HTTP).

Когда используя container-managed EntityManager (средства, инъецированные @PersistenceContext), контейнер будет автоматически распространяться для Вас контекст транзакции между всеми бобами (контроллер/услуги/дао/и т.д ...) подразумеваемые в единичном живучесть манипуляции.

(последнее предложение означает, что он откроет транзакцию при встрече с аннотацией @transactionnal, и каждый метод для любого компонента, выполняемого во время текущего вызова метода, будет частью одной и той же транзакции. Транзакция будет совершена (или откат) на конец выполнения метода).

Смежные вопросы