题
我有一个领域对象的使用身份地图(键的目的 Id
财产)。
伪:
map = new Mapping();
map[domainObj.Id] = 'foo';
我观察的对象告诉我的时候它已经保存的数据库:
domainObj.bind('saved', function() {
map[domainObj.Id] = 'new foo!'
})
对新对象的 Id
领域是空的,没有填充,直到它被保存的数据库。
而这就是我的问题。在这种情况下的新的对象,查找"map[domainObj.Id]
"失败,因为对象是身份已经改变之后被保存!
什么是最好的方式来使用的对象在一个身份地图这样吗?
限制:
- 我使用的语言,不允许对象的关键在映[JavaScript]
- 的
Id
场 必须 能生成的服务器上保存一个新的对象
更新
谢谢你的反馈意见。我真的想有价值的对象映射的相同方式作实体:只是因为价值的对象没有被保存并不意味着它没有价值的地图给我的应用程序。我是在事实误的理解是什么身份地图(其中,在重新阅读的模式定义,事实证明我不是真正使用).
解决我有很多直接来自伊戈尔的答复:每个对象得到一个随机的id分配给它的时实例。它是唯一的、不变和不变的使用寿命期间的环境对象的生活。它的存在为这两个实体中从数据库和新的实例.所调整的实体,它设定为比赛的真实身份的目的。这使得调试更容易一点。这是值我用的关键在映射。
解决方案
直到一个对象得到的身份,它只是一个 值的对象.只有在身份已经确立它成为一个 实体.
直到的对象变为一个实体,你真的不能把它放在一个身份地图像你这样的-这没有意义,因为你不能把它拔出来(因为你没有一个独特的关键要找到它)。
一种可能的方法:
- 增加一个标志类,它指示国家的对象(新/保存)。
- 实施一个临时(client-side)ID为这些对象
- 可选:
- 保持"新"的对象在一个 单独的 身份地图(如果你 不能 避免ID冲突之间的客户和服务器IDs)
- 保持"新"的对象 同 身份地图(如果你 可以 避免ID冲突之间的客户和服务器IDs)
- 一旦对象已被储存,替代客户身份证的服务器标识、设定国家保存、移动到主的身份地图(如果必要)。
看看这里有关 实体与值的对象
其他提示
好吧,你必须找到一种推迟将对象添加到地图的方法,直到 之后保存并分配了一个ID。
不隶属于 StackOverflow