6

我有一个与 JAVA/MySQL 堆栈接口的 Angular JS JSON 客户端。由于 MySQL 是一个 RDBMS,所以我的所有数据都是标准化的(当然是前三种形式)。

我的问题可以用下面的例子来说明。

我有服务器返回的示例对象和用户对象。

Example - [{
userId:1,
...
...
..
},
{
userId:2,
...},
{
userId:3,
...}];

User - [
{
userId - 1,
firstName - "John",
lastName - "Doe",
..
},
{
userId - 2,
firstName - "Jane",
lastName - "Doe",
..
}, {...}...
]

当我使用 Angular“example_entry in example”查看 Example 集合并显示 Example 集合元素时,我只有 userId 随时可用。但是如果我想显示名字和姓氏,我不能这样做,因为它在不同的“用户”集合中。我必须编写一个辅助 Angular 控制器/服务方法来从 User 集合中获取 firstName、lastName 并将其与 Example 集合对象绑定。

为了避免这个问题,我可以对 Java Ojbects 进行反规范化并像这样发送准备好使用 JSON..

Example - [{
userId:1,
firstName - "John",
lastName - "Doe",
...
...
..
},
{
userId - 2,
firstName - "Jane",
lastName - "Doe",
...},
{
userId:3,
...}];

但这是好/坏/可怕吗?因为现在我的 Java 域对象在示例对象和用户对象中重复了名字、姓氏。关于哪条路线更好的建议?

De-Normalize and have ready to use JSON
Keep Data Normalized to avoid duplication and write converter methods on the Client as needed
4

2 回答 2

5

当您将数据发送到您的 UI 层时,您应该对数据进行非规范化处理。

如果您的数据在数据库中,那么这是标准化数据的好地方。使用抽象化规范化和查询视图的视图。该视图允许您将表连接在一起以从数据库中获取非规范化数据。

在 UI 层中,您希望有清晰、简单的显示 - 那是 angular 最闪耀的时候。除非您在屏幕上显示大量数据或通过网络发送大量数据,否则直接从数据库发送非规范化记录会更好。数据库非常擅长连接和其他数据查询功能——它就是为此而构建的。Javascript可以做到这一点,但它并不是最好的使用方式。

于 2013-10-30T23:03:30.147 回答
3

这是我对此的看法。在显示\列出数据时,我并不担心域模型\类。对我来说,返回的数据应尽可能匹配 UI 显示要求。这里的目的是向用户显示数据,并没有对此类屏幕进行太多决策。

但是,如果需要更改\更新数据,则需要更加小心发送的内容,哪些实体参与更新。保持数据一致成为优先事项,在这种情况下,反规范化可能不合适。

于 2013-09-22T08:13:25.730 回答