Java EE - Какой правильный уровень для форматирования объектов модели домена перед передачей их в представления? - PullRequest
2 голосов
/ 14 июля 2011

Я занимаюсь разработкой веб-приложения с типичной многоуровневой архитектурой:

уровень DAO, который извлекает объекты модели домена из базы данных;

этот уровень связывается с сервисным уровнем, который выполняет некоторые бизнес-операции с использованием этих объектов;

веб-слой (Spring Controllers) использует служебный слой для извлечения объектов модели домена (или коллекций для них) и передачи их в слой представления;

слой представления - это либо простые JSP, которые показывают данные с использованием JSTL, либо JSP, которые извлекают некоторые данные через AJAX в форме объектов JSON (объекты домена, преобразованные в JSON через библиотеку Джексона).

Я исследовал следующее:

Очень часто мне нужно преобразовать поля БД в другой формат, чтобы показать их пользователю. Например, Дата может быть сохранена как метка времени, и я хочу, чтобы она отображалась как отформатированная дата (например, дд / мм / гггг).

Кроме того, мне нужно сделать обратное, преобразовать некоторое значение (обычно пользовательский ввод) в формат свойства объекта модели домена.

Мой вопрос: где мне делать такие преобразования? Особенно с данными JSON, они должны быть уже отформатированы в ответе AJAX, я не думаю, что должен отформатировать его с Javascript, я прав?

Заранее спасибо.

1 Ответ

2 голосов
/ 14 июля 2011

Очень часто мне нужно преобразовать поля БД в другой формат, чтобы показать их пользователю.Например, Дата может быть сохранена как метка времени, и я хочу, чтобы она отображалась как отформатированная дата (например, дд / мм / гггг).

Кроме того, мне нужно сделать обратное, преобразовать некоторое значение (обычно пользовательский ввод) в формат свойства объекта модели домена.

Мой вопрос: где мне делать такие преобразования?

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

Вы можете ссылаться на хорошо написанные приложения JSF (так как вы упомянули, что используете Java EE),где конкретные преобразователи написаны, чтобы гарантировать, что представление будет форматировать содержимое объектов домена соответствующим образом.

Особенно с данными JSON, они должны быть уже отформатированы в ответе AJAX, я не думаю, что мне следует форматироватьэто с Javascript, я прав?

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

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