模型在项目组件中的一致性有多重要?

时间:2012-12-01 23:00:15

标签: oop model-view-controller database-design mobile

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

我的模型在双方之间有1:1的相关性有多重要?并且,为了将问题扩展到我更大的担忧,是否有任何时间炸弹,如果他们不,我会遇到这种情况?我不是在谈论每一方都有不同的信息,而是封装信息的方式会有所不同。 (显然,存储机制也会有所不同)服务器端将存储每个用户,每个评论,每个“项目”与单独的表,并在它们之间创建链接以根据需要收集数据。然而,客户端不应该有一个完整的用户数据库,因此,不是为了收集用户收集“名称”之类的内容而链接,我会将其存储在评论中。换句话说......

---服务器端---

档案: + ID //存储关于物品的东西

用户: + ID +名称 -Password

修改: + ID +的itemId +评级 +文本 +用户id

---设备端---

档案: + ID + AverageRating

修改: + ID +评级 +文本 +用户id +名称

用户: + ID +名称 //东西


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

我基本担心的是,即使正确的数据库规范化表明信息应该存储在以下,我也不会想要用他们不需要的大量信息来消耗用户的带宽或本地存储。一个'较低'的水平。

我认为这是一个相当低级别的概念问题,因为这是我正在考虑/担心的水平,但如果重要的是我正在创建一个为iOS /提供数据的PHP / MySQL服务器CoreData客户端。

1 个答案:

答案 0 :(得分:2)

如果您正在通过这样的网络移动数据,或者您只在客户端存储一些但不是全部的数据,那么在整个鸿沟中没有完全相同的结构。

但是,您希望尽可能使用相同的术语相同的命名,以避免混淆什么是什么。 (在域驱动设计书中使用相同的术语也是something that is touched

这不是一个很大的问题,但两端都有相同的结构会让人更容易理解。因此,如果您想要实现这一点,您可能需要考虑对正在传输的数据使用一些封装,而不是简化客户端模型本身。

该模式通常称为Data Transfer Object或DTO。基本上,您可以使用它为您通过线路移动的数据提供结构,然后您可以在客户端上解构为相同的模型结构。在PHP中,您可以使用关联数组来表示此结构,但使用实际类可以帮助确保分配给DTO的数据符合预期的格式。