在客户机/服务器scala.js/scala系统中在客户机上缓存关系对象树的框架解决方案?
这是一个相当标准的问题,但我不确定Scala中的标准答案是什么,尤其是Scala/Scala.js系统 假设您拥有一个由以下内容组成的域:在客户机/服务器scala.js/scala系统中在客户机上缓存关系对象树的框架解决方案?,scala,caching,playframework,slick,scala.js,Scala,Caching,Playframework,Slick,Scala.js,这是一个相当标准的问题,但我不确定Scala中的标准答案是什么,尤其是Scala/Scala.js系统 假设您拥有一个由以下内容组成的域: 承包商 Agent 代理机构 发票 在关系方面: Contractor-[has\u agent]->agent Agent-[has\u agency]->agency agent-[has\u Inoivce]->发票 域存储在SQL数据库中,并使用Slick读取到服务器端的Scala case类中。案例类对应于数据库表中的行,外键用于创建更复杂
承包商
Agent
代理机构
发票
Contractor-[has\u agent]->agent
Agent-[has\u agency]->agency
agent-[has\u Inoivce]->发票
承包商的案例类别:
case class Contractor(
id: Int,
name: String,
agent: Agent
)
和代理
case class Agent(
id: Int,
name: String,
agency: Agency
)
服务器将案例类序列化为JSON以交付给客户端
当反序列化回客户机上的case类时(多亏了scala js),每个获取的数据集形成自己的独立对象图。如果提取了两个承包商
,并且他们都有相同的代理
,那么他们将包含链中剩余部分的重复集,直到代理
。如果一个对象图中的信息在客户端上发生更改,或者通过稍后再次获取而更新,则存在数据不同步的巨大风险
事实上,服务器上也会出现两个副本,因为每次从数据库中读取给定行时都会创建一个副本。但在服务器上,它们是短暂的
从概念上讲,在客户机上构建一些集合并确保每个对象只有一个副本并不困难,但这是一个工作,也是一个普遍的问题
是否有一个标准框架可供使用?也许是缓存框架?最适合使用Scala.js的Scala(使用Slick and Play和MySQL)?我会从JSON中没有嵌套对象开始。我将通过为每个不同的实体提供唯一的ID来建立关系模型。您可能已经有了它,作为支持联接的外键
示例案例类:
case class Contractor(
id: ContractorId, //Prefer typed Ids (wrapped values) instead of primitives.
name: String
agent: AgentId
)
然后您可以在客户机上使用类似于的东西,可能对相关实体使用一个。我将通过为每个不同的实体提供唯一的ID来建立关系模型。您可能已经有了它,作为支持联接的外键
示例案例类:
case class Contractor(
id: ContractorId, //Prefer typed Ids (wrapped values) instead of primitives.
name: String
agent: AgentId
)
然后你可以在客户机上使用类似的东西,也许可以在相关实体上使用