Google app engine 什么时候应该在Google应用程序引擎应用程序中使用Expando类?
谷歌应用程序引擎有哪些应用程序?Google app engine 什么时候应该在Google应用程序引擎应用程序中使用Expando类?,google-app-engine,expando,Google App Engine,Expando,谷歌应用程序引擎有哪些应用程序? 与之相关的良好实践是什么?Expandos的两个常见用途是部分固定的模式和旧属性 class Order(db.Expando): # Every instance has these fields. item_code = db.StringProperty() unit_of_measure = db.StringProperty() unit_price = db.FloatProperty() quantity =
与之相关的良好实践是什么?Expandos的两个常见用途是部分固定的模式和旧属性
class Order(db.Expando):
# Every instance has these fields.
item_code = db.StringProperty()
unit_of_measure = db.StringProperty()
unit_price = db.FloatProperty()
quantity = db.FloatProperty()
def compute_gallons(entity, kilograms, kg_per_gallon):
# Set the fixed fields.
entity.unit_of_measure = 'GAL'
entity.quantity = kilograms / kg_per_gallon
# Set the gallon specific fields:
entity.weight = kilograms
entity.density = kg_per_gallon
我经常使用Expando,当我有一种需要在不同实体之间稍有不同的属性时;换句话说,当我需要“部分”动态模式时。一个用例是一个应用程序,它接受订单,其中一些产品是液体(比如水),一些是物理单位(比如DVD),一些是“其他”(比如面粉)。某些字段,如项目代码、价格和数量,总是需要的。但是,如果还需要计算数量的详细信息呢
通常,固定模式解决方案是为我们可能使用的所有变量添加一个属性:权重、维度、股票的前后权重,等等。那太糟糕了。对于每个实体,大多数其他字段都不需要
class Order(db.Model):
# These fields are always needed.
item_code = db.StringProperty()
unit_of_measure = db.StringProperty()
unit_price = db.FloatProperty()
quantity = db.FloatProperty()
# These fields are used depending on the unit of measure.
weight = db.FloatProperty()
volume = db.FloatProperty()
stock_start_weight = db.FloatProperty()
stock_end_weight = db.FloatProperty()
有了Expando,我们可以做得更好。我们可以使用度量单位来告诉我们如何计算数量。计算数量的函数可以设置动态字段,读取该方法信息的函数知道要查找什么。而且,实体没有一堆不需要的属性
class Order(db.Expando):
# Every instance has these fields.
item_code = db.StringProperty()
unit_of_measure = db.StringProperty()
unit_price = db.FloatProperty()
quantity = db.FloatProperty()
def compute_gallons(entity, kilograms, kg_per_gallon):
# Set the fixed fields.
entity.unit_of_measure = 'GAL'
entity.quantity = kilograms / kg_per_gallon
# Set the gallon specific fields:
entity.weight = kilograms
entity.density = kg_per_gallon
通过使用text或blob属性并将“other”值的dict序列化给它,可以获得类似的结果。Expando基本上为您“自动化”了它。在您概述的情况下,另一个选择是使用PolyModel;但是您可能会创建和导入大量的模型来处理变化(对于这种类型的示例)。我处理的是液体,有很多(我们的应用程序使用了大约12种)计算体积的方法。这是Expando模型最简洁的原因总结之一。谢谢