我将分两部分来提出这个问题:首先是一般问题,而不是针对我的具体用例的问题。如何使用非规范化数据保持代码清洁?
一般问题:
我建立一个播客应用,在那里,希望我们能有用户。用户具有subscripitons,设置,...,我想要存储在用户对象,但订阅和设置不属于我的代码中相同的模块。
你如何构建你的代码,以便有关用户的所有相关数据都存储在一起,但定义和处理特定属性的代码可以分开吗?
我的具体使用案例
我在Google App Engine上构建后端。我的用户类看起来是这样的:
class User(ndb.Model):
username = ndb.StringProperty(required=True)
email = ndb.StringProperty(required=True)
...
现在我只需要添加另一个属性用于订阅,设置等,但是这些定义并不真正的用户模块中的归属。我试着用ndb.PolyModel
来定义一个SubscriptionsHolder
和SettingsHolder
类,但是通过多重继承,只有用户定义中最后一个超类的查询才支持查询。
我可以只作settings
等模块查询用户模型直接,但这会导致循环依赖,用户的users
模块依赖于settings
的子类,并settings
取决于users
进行查询。我知道我可以通过移动导入语句来解决循环依赖问题,但这对我来说似乎只是一种破解。
如何使用用户的StructuredProperty或LocalStructuredProperty来存储设置? – 2015-02-11 00:39:25
是的,这就是我用来存储设置的内容,但我不希望在用户模块中定义该属性。 – bigblind 2015-02-11 01:07:20