所以我有一个定义良好的模式。支持它的数据存储将允许此请求。 (MongoDB的)。
假设我有一个Users类:
class User
emailAddress
name
如果我合并来自其他来源的数据(比如说map / params,我可以正确识别来源。)我的意图是将未使用的属性放在User类的结构中。
例如:如果我从Facebook导入用户,他们将在emailAddress或名称之外拥有各种属性。我还不知道如何处理这些问题。
我的问题是:我如何设计一个域类,以便它可以在创建对象时处理所有这些? (我愿意用一个示踪物来表示来源)[即。添加[来源:Facebook]]
输出类看起来如此序列化:
从Facebook回来的信息将是[姓名:Jim,电子邮件:bo@jim.com,朋友:1000,级别:42]。结果类将是:
class User
emailAddress : bo@jim.com
name: Jim
extraProperties: [Facebook, [friends:1000, level:42]]
解决这个问题的最佳方式是什么?它会打破域类模型吗? expando可以在这里运作吗?
答案 0 :(得分:1)
我认为设计域类的最佳方法是将其他用户的属性(extraProperties)保存为序列化文档'类型对象。如果您要将示例Map转换为JSON / GSON或XML(Converters)并将其作为文档/大型nvarchar保存到数据库中,则可以为每个用户源提供不同属性的灵活性
然后,您可以向域对象添加自定义getter和setter,这将转换/篡改文档,并将其作为地图呈现给您的控制器/服务
String extraProperties
def setExtraProperties(def properties){
this.extraProperties = (properties as JSON)?.toString()
}
def getExtraPropertiesMap() {
def jsonSlurper = new JsonSlurper()
def extraProps = jsonSlurper.parseText(this.extraProperties)
return extraProps //you can then access this using map syntax, eg. extraProps.Facebook.friends
}