我正在使用Scala,萨拉特,卡斯巴,蒙戈,Play2,BackboneJS项目......但它是相当多的新东西,在同一时间去学习......我确定使用Scala,但我觉得我的代码蹩脚的,我真的不知道什么来改善它的解决方案。
基本上我用例是:
- 一个MongoDB的对象由Play2发送到浏览器的JS代码
- JS代码(通过骨干模型)更新对象数据
- 该JS发回更新的JSON到服务器(由骨干保存方法发送,并通过播放用JSON bodyparser收到)
- 通过播放接收到的JSON应该更新在MongoDB中的对象
- 某些字段不应该更新出于安全原因(对象ID,creationDate ...)
我的问题是最后一部分。 我使用的情况下,班级,萨拉特存储在MongoDB中的对象的表示。
我真的不知道该如何处理我从JS代码收到JSON。
我应该在JSON绑定到萨拉特案例类,然后问蒙戈由焕发出新的情况下,类对象覆盖以前的对象的数据? 如果是的话是有与Play2或礼拜的方式来自动创建回从接收到的JSON的情况下类?
我应该用$因为我想更新的领域设置单独处理我的JSON字段?
我应该让我的案件类的元素可变的? 这是我们实际上是做为例在Java中使用Hibernate:从数据库获取对象,改变其状态,并保存它。 但它似乎并没有被恰当的方式做斯卡拉...
如果有人可以给我要我的用例一些建议这将是很好,因为我真的不知道该怎么办:(
编辑:我在这里提出一个相关的问题: 我应该代表那些不可变的或可变的数据结构,数据库中的数据?
您想为您更新JSON数据结构部分镜头。 http://dropbox.tmorris.net/media/doc/lenses.pdf
萨拉特处理使用JSON升JSON -见https://github.com/novus/salat/wiki/SalatWithPlay2 。
游戏本身使用Jerkson,这是另一种方式来解码你的模型对象-看到http://blog.xebia.com/2012/07/22/play-body-parsing-with-jerkson/为例。
随意做出的证明您的问题并发布到网上礼拜邮件列表一个小样本Github上项目https://groups.google.com/group/scala-salat寻求帮助。
有真的在你的问题两个问题:
- 如何使用播放萨拉特。
- 如何防止更新某些领域。
回答你的第一个问题就在于中播放萨拉特文档 。 你的第二个问题可以回答了几个办法。
一个。 当更新从骨干推到服务器,你可以抓住的对象ID,并发现它在数据库中。 在这一点上,你有对象的两个副本。 在这一点上,你可以触发一个业务规则,以确保发送者并没有试图改变这些领域。
要么
湾 你可以把你的一些字段中嵌入文档的另一个文档。 客户将有机会获得他们渲染的目的,但你的API不会让他们推回蒙戈。
要么
C。 你可以写一个忽略你不希望改变的字段的自定义更新查询。
其实答案很简单:我不知道有案例类内置的复制方法,它允许复制一个不可改变的情况下类,同时改变一些数据。
我没有嵌套情况下的阶级结构,但使用镜头的托尼·莫里斯建议似乎不错了。