用一些智慧创建域 Class
Creating a Domain Class with Some Smarts
所以我有一个定义明确的架构。支持它的数据存储将允许此请求。 (MongoDB).
假设我有一个用户 class:
class User
emailAddress
name
如果我合并来自另一个来源的数据(比如说 map/params,我可以正确识别来源。)我的目的是将未使用的属性放在用户 class。
例如:如果我从 facebook 导入用户,他们将拥有除 emailAddress 或名称之外的各种属性。但是我还不知道如何处理这些。
我的问题是:我将如何设计域 class 以便它可以在创建对象时处理所有这些? (我愿意放入示踪剂 属性 来表示来源)[即添加 [来源:Facebook]]
输出 class 看起来,并被序列化为:
从 Facebook 返回的信息将是 [姓名:Jim,电子邮件:bo@jim.com,friends:1000,level:42]。结果 class 将是:
class User
emailAddress : bo@jim.com
name: Jim
extraProperties: [Facebook, [friends:1000, level:42]]
解决这个问题的最佳方法是什么?它会破坏域 class 模型吗? expando 可以在这里工作吗?
我认为设计域的最佳方法 class 是考虑将其他用户的属性 (extraProperties) 保存为序列化 'document' 类型的对象。如果您要将示例地图转换为 JSON/GSON 或 XML (Converters) 并将其作为文档/大型 nvarchar 保存到数据库中,则您可以灵活地使用每个用户来源的不同属性。
然后您可以将自定义的 getter 和 setter 添加到您的域对象中,这将转换/吞噬文档,并将其作为地图呈现给您的 controllers/services
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
}
所以我有一个定义明确的架构。支持它的数据存储将允许此请求。 (MongoDB).
假设我有一个用户 class:
class User
emailAddress
name
如果我合并来自另一个来源的数据(比如说 map/params,我可以正确识别来源。)我的目的是将未使用的属性放在用户 class。
例如:如果我从 facebook 导入用户,他们将拥有除 emailAddress 或名称之外的各种属性。但是我还不知道如何处理这些。
我的问题是:我将如何设计域 class 以便它可以在创建对象时处理所有这些? (我愿意放入示踪剂 属性 来表示来源)[即添加 [来源:Facebook]]
输出 class 看起来,并被序列化为:
从 Facebook 返回的信息将是 [姓名:Jim,电子邮件:bo@jim.com,friends:1000,level:42]。结果 class 将是:
class User
emailAddress : bo@jim.com
name: Jim
extraProperties: [Facebook, [friends:1000, level:42]]
解决这个问题的最佳方法是什么?它会破坏域 class 模型吗? expando 可以在这里工作吗?
我认为设计域的最佳方法 class 是考虑将其他用户的属性 (extraProperties) 保存为序列化 'document' 类型的对象。如果您要将示例地图转换为 JSON/GSON 或 XML (Converters) 并将其作为文档/大型 nvarchar 保存到数据库中,则您可以灵活地使用每个用户来源的不同属性。
然后您可以将自定义的 getter 和 setter 添加到您的域对象中,这将转换/吞噬文档,并将其作为地图呈现给您的 controllers/services
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
}