2

我有一个包含两个组件的项目,一个服务器端组件和一个客户端组件。由于各种原因,客户端设备没有携带数据库的完整副本。

我的模型在两侧之间具有 1:1 的相关性有多重要?而且,把这个问题延伸到我更关心的问题上,如果他们不这样做,我是否会遇到任何定时炸弹?我不是在谈论在每一方都有不同的信息,而是信息的封装方式会有所不同。(显然,存储机制也会有所不同)服务器端将使用单独的表格存储每个用户、每个评论、每个“项目”,并在它们之间创建链接以在必要时收集数据。然而,客户端不应该有一个完整的用户数据库,所以与其链接用户来收集像“名字”这样的东西,我会把它存储在评论中。换句话说...

- - 服务器端 - -

Item: +id //存储关于item的东西

用户:+id +姓名 -密码

评论:+id +itemId +rating +text +userId

--- 设备端 ---

项目:+id +AverageRating

评论:+id +rating +text +userId +name

用户:+id +Name //东西


基本思想是将某些“关键”信息“向上”移动一级。用户获得与其查询相关的“项目”列表,其中某些面向评论的信息上移(即平均评分)。如果他们想要更多信息,他们会查询项目的详细视图,然后查询实际评论并将其添加到数据集(并显示)。如果他们查询实际评论,则会查询评论并在此过程中获取一些额外的用户信息(也许;我不确定用户是否会对任何其他用户信息有任何用途)。

我的基本担忧是,我不想让用户的带宽或本地存储充斥着他们根本不需要的大量信息,即使适当的数据库规范化表明信息真的应该存储在“较低的' 等级。

我将其表述为一个相当低级别的概念问题,因为这是我试图思考/担心的级别,但如果重要的话,我正在创建一个为 iOS / CoreData 客户端提供数据的 PHP / MySQL 服务器。

4

1 回答 1

2

在这样的情况下,您要在这样的网络上移动数据,或者您只在客户端上存储一些而不是全部的数据,那么没有完全相同的结构是可以的。

但是,您将希望尽可能使用相同的术语相同的命名,以避免混淆什么是什么。(使用相同的术语也是领域驱动设计书中提到的)

这不是一个很大的问题,但是两端具有相同的结构将使事情更容易理解。因此,如果您想追求这一点,您可能需要考虑对正在传输的数据进行一些封装,而不是简化客户端模型本身。

该模式通常称为数据传输对象或 DTO。本质上,您将使用它为您在网络上移动的数据提供一个结构,然后您可以在客户端上将其解构为相同的模型结构。在 PHP 中,您可以只使用关联数组来表示此结构,但使用实际类有助于确保分配给 DTO 的数据符合预期格式。

于 2012-12-01T23:28:37.407 回答