2

我正在开发一个具有典型分层架构的 Web 应用程序:

从数据库中检索域模型对象的 DAO 层;

该层与使用这些对象进行一些业务操作的服务层通信;

Web 层(Spring 控制器)使用服务层来检索域模型对象(或它们的集合)并将它们传递给视图层;

视图层要么是使用 JSTL 显示数据的简单 JSP,要么是通过 AJAX 以 JSON 对象(通过 Jackson 库转换为 JSON 的域对象)形式检索一些数据的 JSP。

我一直在研究以下内容:

很多时候,我需要将 db 字段转换为不同的格式以显示给用户。例如,日期可能存储为时间戳,我希望它显示为格式化日期(例如 dd/mm/yyyy)。

另外,我需要做相反的事情,将一些值(通常是用户输入)转换为域模型对象属性的格式。

我的问题是,我应该在哪里进行这种转换?特别是对于 JSON 数据,它们应该已经在 AJAX 响应中格式化,我认为我不应该用 Javascript 格式化它,对吗?

先感谢您。

4

1 回答 1

2

很多时候,我需要将 db 字段转换为不同的格式以显示给用户。例如,日期可能存储为时间戳,我希望它显示为格式化日期(例如 dd/mm/yyyy)。

另外,我需要做相反的事情,将一些值(通常是用户输入)转换为域模型对象属性的格式。

我的问题是,我应该在哪里进行这种转换?

我的观点是,所有的数据格式转换都应该在视图中完成,或者在协作对象中完成。模型或服务层不应执行此活动。在模型中执行此操作将是糟糕的设计,因为它会将模型公开的接口耦合到仅一个视图。此外,这会使在视图中进行更改变得更加困难,也需要更改模型。

您可以参考编写良好的 JSF 应用程序(因为您提到您使用的是 Java EE),其中编写了特定的转换器以确保视图将适当地格式化域对象的内容。

特别是对于 JSON 数据,它们应该已经在 AJAX 响应中格式化,我认为我不应该用 Javascript 格式化它,对吗?

这将取决于您如何查看视图。如果您对视图的表示是服务器必须向客户端提供格式化数据,那么服务器应该这样做。但是,大多数应用程序采用实用的方法,其中客户端逻辑也被视为视图的一部分。根据使用数据的上下文,您可以:

  • 要么在服务器上格式化数据,特别是如果格式化的数据在客户端普遍使用而没有任何进一步的修改。
  • 或者,以规范的形式向客户端传输数据,然后根据使用数据和/或向用户显示数据的上下文对其进行格式化。
于 2011-07-14T01:21:47.150 回答