数据应该在后端还是前端格式化?

dch*_*tri 18 javascript parsing backend web

我有一个Web应用程序,我想知道在前端或后端格式化数据是否更好?他们都完成了工作,但有人可以帮助我集思广益,这是两者之间更好的选择.

作为一个例子,假设我有一个后端,以某种格式返回名称的族谱,但在前端我需要调整格式以匹配小部件期望的格式,如果在后端完成此调整还是前端?

如果它在后端完成,我可以直接将数据推送到前端的小部件中,我必须事先在前端解析.谁能想到这种情况的利弊?谢谢.

Gui*_*lmi 7

好问题.我做了一个分层的MVC风格的架构.

BACKEND

我根据它的"自然"顺序对后端数据进行建模(格式化).换句话说,我遵循数据的内部组织.这是因为我的API经常被多个,更改或不断发展的客户端使用,并且多次重写API或者多个版本需要花费太多时间来维护.

这并不意味着您应该在每次API调用时发送数据库的内容.对于每个调用,您绝对应该削减数据模型,但它应该是后端("自然")数据模型的削减版本,而不是针对特定视图定制的数据结构.

前端

在前端,我有一个紧密耦合的控制器,它从服务器接收数据并将数据转换为适合给定视图的模型.根据客户端使用的技术,可能有库支持(例如,用于Java的Javascript/HTML Swing的AngularJS,用于C#的WPF等)

我发现这种架构可以实现清洁分离和高生产率.


mar*_*ful 6

这实际上取决于您需要对数据进行转换的性质,还取决于需要进行某种类型转换的频率。

默认情况下,我会让后端返回原始数据,但是对于前端经常需要的特定数据格式,我会让后端端点接受一个请求参数,该参数告诉后端它应该以哪种格式返回数据。


BLS*_*lly 5

我与另一个合作的开发人员一起处理这个问题。他喜欢在SQL中工作,并且基本上在那里做所有事情,业务逻辑,格式化等等。在我看来(至少对于我们正在使用的应用程序而言),SQL用于处理数据的存储和检索,服务器代码/客户端代码用于向用户呈现数据并处理用户与该数据的交互。

但是,这不仅限于SQL(或其他数据库引擎)还是您的应用程序代码。在服务器代码更多是API的情况下,将数据交给javascript繁重的Web应用程序,同样的情况也适用。API不知道UI可能要对数据做什么,API的目的应该是传递原始数据,并让javascript / presentation代码以所需的方式处理其格式。

我敢肯定有例外,但这是我喜欢遵循的一般规则。格式化属于表示领域,而不是业务逻辑或数据检索领域。保持在那里。

编辑:我重读了您的问题,我想我错过了一个微妙但很关键的观点。如果您有一个构造函数或模型,或者期望以某种特定格式输入的内容,则最好在SQL中进行格式化/转换,以避免在使用数据之前进行转换的额外步骤。但是,这将在很大程度上取决于要解决的问题,以及数据来自何处以及将在何处使用的详细信息。