首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户机/服务器scala.js/scala系统中客户端缓存关系对象树的框架解决方案?

客户机/服务器scala.js/scala系统中客户端缓存关系对象树的框架解决方案?
EN

Stack Overflow用户
提问于 2016-04-25 22:29:46
回答 1查看 129关注 0票数 0

这是一个非常标准的问题,但我不确定Scala中的标准答案是什么,特别是Scala / Scala.js系统。

考虑到您有一个由以下内容组成的域:

  • Contractor
  • Agent
  • Agency
  • Invoice

与这些关系:

  • Contractor -[has_agent]-> Agent
  • Agent -[has_agency]-> Agency
  • Agency -[has_Inoivce]-> Invoice

域存储在SQL数据库中,并使用Slick将其读入服务器端的Scala案例类中。Case类对应于数据库表中的行,外键用于创建更复杂(嵌套)的案例类。例如,Contractor的case类

代码语言:javascript
复制
case class Contractor(
    id:    Int,
    name:  String,
    agent: Agent
)

和一个Agent

代码语言:javascript
复制
case class Agent(
    id:     Int,
    name:   String,
    agency: Agency
)

服务器将case类序列化为JSON,以便交付给客户端。

当反序列化回客户机上的case类时(感谢scala),每个获取的数据集都形成自己的孤立对象图。如果获取两个Contractor,并且它们都具有相同的Agent,则它们将包含链其余部分的重复集,直到Agency为止。如果在客户端上更改了一个对象图中的信息,或者稍后再通过获取更新,那么数据不同步的风险就很大。

事实上,服务器上也可以出现两个副本,因为每次从数据库读取给定行时都会创建一个副本。但在服务器上,它们的寿命很短。

从概念上来说,在客户端上构建一些集合并确保每个对象只有一个副本在概念上并不困难,但这是一个工作,而且是一个普遍的问题。

是否有标准框架可供使用?也许是一个缓存框架?最适合使用Scala.js的Scala (使用灵活的播放和MySQL)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-26 20:32:30

首先,在JSON中没有嵌套对象。我将通过为每个不同的实体建立一个唯一的ID来建模关系。您可能已经拥有了这个,作为支持联接的外键。

示例类:

代码语言:javascript
复制
case class Contractor(
  id:    ContractorId, //Prefer typed Ids (wrapped values) instead of primitives.
  name:  String
  agent: AgentId
)

然后,您可以在客户机上使用类似于二极管的东西,可能对相关实体使用ReftTo

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36852229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档