client/server scala.js/scala 系统中客户端缓存关系对象树的框架解决方案?
Framework solution for caching relational object tree on client in client/server scala.js/scala system?
这是一个非常标准的问题,但我不确定 Scala 中的标准答案是什么,尤其是 Scala / Scala.js 系统。
鉴于您的域包含:
Contractor
Agent
Agency
Invoice
与关系:
Contractor -[has_agent]-> Agent
Agent -[has_agency]-> Agency
Agency -[has_Inoivce]-> Invoice
域存储在 SQL 数据库中,并使用 Slick 在服务器端读入 Scala case classes。 Case classes 对应于数据库表中的行,外键用于创建更复杂(嵌套)的 case classes。例如。 Contractor
的案例 class:
case class Contractor(
id: Int,
name: String,
agent: Agent
)
和一个Agent
case class Agent(
id: Int,
name: String,
agency: Agency
)
服务器将案例 classes 序列化为 JSON 以交付给客户端。
当在客户端反序列化回 case classes 时(多亏了 scala-js),每个获取的数据集都形成了自己的独立对象图。如果两个 Contractor
被获取并且它们都具有相同的 Agent
,它们将包含链的其余部分的重复集,直到 Agency
。如果一个对象图中的信息在客户端发生更改或通过稍后再次获取进行更新,则数据不同步的风险很大。
事实上,服务器上也可以出现两个副本,因为每次从数据库中读取给定行时都会创建一个副本。但是在服务器上它们是短暂的。
在客户端上构建一些集合并确保每个对象只有一个副本在概念上并不困难,但这是可行的,而且是一个普遍问题。
有没有标准的框架可以使用?也许是一个缓存框架?最适合带有 Scala.js 的 Scala(带有 Slick and Play 和 MySQL)?
这是一个非常标准的问题,但我不确定 Scala 中的标准答案是什么,尤其是 Scala / Scala.js 系统。
鉴于您的域包含:
Contractor
Agent
Agency
Invoice
与关系:
Contractor -[has_agent]-> Agent
Agent -[has_agency]-> Agency
Agency -[has_Inoivce]-> Invoice
域存储在 SQL 数据库中,并使用 Slick 在服务器端读入 Scala case classes。 Case classes 对应于数据库表中的行,外键用于创建更复杂(嵌套)的 case classes。例如。 Contractor
的案例 class:
case class Contractor(
id: Int,
name: String,
agent: Agent
)
和一个Agent
case class Agent(
id: Int,
name: String,
agency: Agency
)
服务器将案例 classes 序列化为 JSON 以交付给客户端。
当在客户端反序列化回 case classes 时(多亏了 scala-js),每个获取的数据集都形成了自己的独立对象图。如果两个 Contractor
被获取并且它们都具有相同的 Agent
,它们将包含链的其余部分的重复集,直到 Agency
。如果一个对象图中的信息在客户端发生更改或通过稍后再次获取进行更新,则数据不同步的风险很大。
事实上,服务器上也可以出现两个副本,因为每次从数据库中读取给定行时都会创建一个副本。但是在服务器上它们是短暂的。
在客户端上构建一些集合并确保每个对象只有一个副本在概念上并不困难,但这是可行的,而且是一个普遍问题。
有没有标准的框架可以使用?也许是一个缓存框架?最适合带有 Scala.js 的 Scala(带有 Slick and Play 和 MySQL)?