POJO JPA как объект данных

Можно обойти проблемы безопасности и создать намного более вежливое приложение путем простой проверки, работает ли процесс Word и просит, чтобы пользователь закрыл его, затем нажмите кнопку 'Continue' в приложении. Это - подход, проявленный многими установщиками.

private bool isWordRunning() 
{
    return System.Diagnostics.Process.GetProcessesByName("winword").Length > 0;
}

, Конечно, можно только сделать это, если приложение имеет GUI

9
задан Nifle 17 September 2009 в 22:08
поделиться

3 ответа

Сущности теперь сами могут передавать свои собственные данные, так зачем вообще преобразовывать их во что-то другое? Другими словами, я склонен согласиться с DTO an AntiPattern в EJB 3.0 :

Большой вес Entity Beans в спецификациях EJB до EJB 3.0 привел к использованию таких шаблонов проектирования, как Объекты передачи данных (DTO). DTO стали легковесными объектами (которые должны были быть в первую очередь самими объектными компонентами), используемыми для отправки данных по уровням. [... ]

Спецификация EJB 3.0 делает модель компонента Entity такой же, как обычный старый объект Java (POJO). С этой новой моделью POJO вам больше не нужно будет создавать DTO для каждой сущности или для набора сущностей. Если вы хотите отправить объекты EJB 3.0 через уровень, просто реализуйте java.io.Serialiazable .

8
ответ дан 4 December 2019 в 12:19
поделиться

Это зависит от того, что вы имеете в виду под «другими частями». Поскольку ваши объекты JPA должны быть каким-то образом связаны с вашей системой, почему бы не использовать их, поскольку они уже существуют. Важным моментом является то, что вы не используете один и тот же класс для двух совершенно разных задач (что, по моему мнению, является либо признаком плохого дизайна, либо просто действительно большой системы). Все остальное, вероятно, просто закончится бесконечным отображением проблем между вашими различными POJO.

Например, логин пользователя. Создание отдельного компонента UserLoginForm для входа в систему через Интернет может быть обычной многословной практикой Java, но учтите следующее:

У вас уже есть объекты JPA пользователя (и, следовательно, POJO пользователя) в базе данных (у него есть имя пользователя, хэш пароля , адрес и, возможно, другие вещи хранятся). Вы также можете использовать точно такой же объект в своем запросе на вход из веб-формы (некоторые фреймворки, такие как Spring, сразу отобразят его). Создайте пустой объект User, установите имя пользователя и хешированный пароль и сделайте запрос JPA на примере. Если этот запрос возвращает ровно один результат, значит логин действителен, и вы можете сохранить загруженный объект пользователя в сеансе.

3
ответ дан 4 December 2019 в 12:19
поделиться

Это хороший вопрос.

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

Будущие изменения устойчивости системы могут быть невозможными, неудобными, ограниченными и / или рискованными. Пример: вам может потребоваться оптимизация производительности и / или масштабируемости. Это может потребовать кэширования, изменения схемы БД, использования не РСУБД, нескольких баз данных. Инкапсуляция также помогает смягчить миграцию на будущие схемы БД.

Таким образом, компромисс заключается в следующем:

  • управление и поддержка уровня сохраняемости приложения поверх JPA, который инкапсулирует сохраняемость. т.е. интерфейс. ИЛИ
  • решите использовать JPA повсеместно в своей архитектуре. Примите тот факт, что будущие изменения могут иметь последствия для всей системы.

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

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

6
ответ дан 4 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: