Хотя очевидно, что не все сценарии могут быть охвачены одним дизайном, обычно считается, что классы ORM должны передаваться между презентационным и бизнес-уровнем (как локальные, так и бизнес-уровни) удаленный), заменив необходимость в объектах передачи данных? Насколько я вижу, использование классов ORM представляет проблемы ненужной нетерпеливой загрузки, проблем управления контекстом и жесткой связи, но также экономит много времени и упрощает простую работу. Существует ли теперь стандартный подход, который в целом поддерживает один над другим (для большинства ситуаций)?Использует объекты передачи данных в ejb3 считается лучшей практикой
ответ
Это очень интересный вопрос, и я изучал и экспериментировал с переходом через два года.
Я думаю, что здесь нет правильного или неправильного ответа. Я не думаю, что вы можете просто сказать, что я хочу один за другим, потому что обычно вам может понадобиться гибрид в зависимости от того, что ваши клиенты (веб-страница, ws, машина и/или локальный, удаленный).
Важно помнить, что все плюсы и минусы для каждого предложения и применения этого основаны на ваших требованиях.
Для примера:
- Если вы используете шовные, то вы хотите, чтобы избежать сильно многоуровневую архитектуру, потому что у вас есть доступ к расширенному контексте сохранения состояния. Другие веб-технологии без этой поддержки, как правило, работают лучше с DTO, который подготовил государство заранее.
- Если вы отправляете удаленное сообщение, задача импорта заключается в том, чтобы сохранить его тонким и легким, DTO, как правило, работает лучше, чем богатый объект домена. Здесь вы можете подавлять прозрачно любые проблемы/поведение ORM.
- Шаблон DTO имеет преимущество защиты ваших клиентов от изменений в домене. Это особенно важно, если ваше приложение является веб-сервисом, имеющим объект домена (сущность), который определяет ваш контракт, который может оставить вас в какой-то момент.
Обернув свою систему слоями и тщательно разоблачая и защищая их, вы можете создавать различные API-интерфейсы для многих клиентов разных типов.
Я думаю, что существование DTO связано с JPA/Hibernate недостатки. Если вы всегда можете делать прозрачную ленивую инициализацию, вы никогда не будете использовать их. Таким образом, использование DTO - это контракт, где мой домен/рабочее пространство всегда проигрывает (дублирование везде). Подводя итоги, вы можете использовать их, но вы должны их ненавидеть :)
Плотная муфта? Пожалуйста, объясни.
Что касается меня DTO - это анти-шаблон. EJB3 позволяет нам использовать их. Вы можете просто заставить свою ленивую инициализацию перед отправкой Entity клиенту.
Конечно, если вам нужно только два из 30 полей для отправки клиенту, вы просто отправляете их. Но если все копии все время, как в моем текущем проекте, попытайтесь избавиться от этого DTO. Я не вижу причин использовать их. Вы отправляете бизнес-объект клиенту в качестве клиента. Зачем использовать обертку?
Я согласен с последним «динамиком», почему использовать обертку, когда в ejb3 ?? Мы строим довольно сложную систему без DTO, но используя Entities (JPA), она сработала. Было ясно ...
, работающий только с объектами, был бы прекрасен, если контроллер GUI отправляет свойства объекта формам, а не объектам сущности.С другой стороны, если сущности используются, и эти сущности имеют отношения «один-к-одному», тогда следует ожидать появления некоторых неприятных исключений, если сущности не будут охотно загружены менеджером сущности.
Такие ситуации можно наблюдать при попытке заполнить теги Spring MVC, например, или аналогичные конструкции других компонентов GUI.
Кроме того, DTOS являются очень хорошим местом для размещения дополнительных аннотаций, таких как аннотация проверки или JAXB и т.д.
У меня есть несколько вопросов, против использования объектов на уровне представления:
Блокировочных: Это в конечном итоге создает жесткую блокировку между презентацией и моделью. Из-за дорогостоящих изменений в больших проектах даже невозможно. Современные инструменты еще не совсем там.
Безопасность: С объектами модели вы легко передаете различные данные идентификатора базы данных на свои веб-страницы. Это явная проблема безопасности. Используя
dto:s
, вы можете скрыть на сервере с очень простыми картами сеансов.Разница потребностей: Графические представления редко представляют собой списки объектов модели. Чаще всего это нечто большее, объединенные звери, guish. Потребности GUI, как правило, ползут к вашей модели, скрывающей ее.
: С сущностями каждое поле обрабатывается каждый раз, когда вы читаете/записываете их. Поскольку вы передаете их непосредственно на презентационный уровень, вам трудно попытаться оптимизировать ваши JPA-запросы - почти невозможно. Я определенно вернусь к прямому JDBC -access - как myBatis в будущих проектах. Таким образом, исключается ORM.
У меня есть проблемы с DTO:s
тоже:
- дополнительный код DAO.
Все, что касается, я проголосую за использование dto:s
для всех проектов, исключая также JPA
. Итак, мой стек становится чем-то вроде:
- myBatis для доступа к базе данных
- POJO в DTO: S
- Stateless EJB для моих DAO услуг.
- StatefulEJB для бэкэнда GUI.
- JSF для представления.
- 1. Использует Action.Invoke считается лучшей практикой?
- 2. Какой из этих методов считается лучшей практикой?
- 3. Javascript appending; Что считается лучшей практикой?
- 4. Использует @Autowired считается хорошей практикой?
- 5. При манипулировании элементами данных: какая из следующих считается лучшей практикой
- 6. Что считается лучшей практикой обработки переменных, хранящихся в файле конфигурации?
- 7. Использует mapM/последовательность считается хорошей практикой?
- 8. поставляет конструктор по умолчанию, который считается лучшей практикой для тестирования?
- 9. Где я должен поместить метод проверки, который считается лучшей практикой?
- 10. Что считается лучшей практикой? Стандарт и/или предложение или случай?
- 11. Почему добавочная нагрузка и наращивание потоков считается лучшей практикой?
- 12. Go организации кода лучшей практикой
- 13. iPhone, использует isKindOfClass считается плохой практикой в любом случае?
- 14. Использует ini_set в скрипте, который считается плохой практикой?
- 15. Считается ли плохой практикой, что объекты ViewModel содержат диспетчер?
- 16. использует имена классов, такие как «правая» считается плохой практикой?
- 17. gcc: Использует -Werror и -pedantic считается хорошей практикой?
- 18. Использует флешку на домашней странице сайта, которая считается плохой практикой?
- 19. Почему сортировка слияния считается лучшей
- 20. Является ли safeApply лучшей практикой?
- 21. Android - Почему использование интерфейса считается лучшей практикой общения между Activity и Fragment?
- 22. Объекты передачи данных - Исключения
- 23. Является ли это лучшей практикой кэширования данных запроса в Backbone.js?
- 24. Что является лучшей практикой в java
- 25. Является ли это лучшей практикой в java?
- 26. есть недостаток, чтобы положить N перед строками в скриптах? Это считается «лучшей практикой»?
- 27. Что считается «лучшей практикой» для проверки условий семантической расы в акке?
- 28. Включить внутри функции считается плохой практикой?
- 29. Проблема с лучшей практикой: данные и представления в объектах
- 30. Код и проблемы с лучшей практикой