Google App Engine Expando Class有哪些應用程序? 有什麼好的做法與它有關?Expando類應該在Google App Engine應用程序中使用嗎?
6
A
回答
3
Expandos的兩種常見用途是部分固定模式和deleting舊屬性。
我經常使用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()
With Expando我們可以做得更好。我們可以使用unit_of_measure
來告訴我們如何計算數量。計算數量的函數可以設置動態字段,並且讀取該方法信息的函數知道要查找什麼。而且,該實體沒有一堆不需要的屬性。
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屬性並將「其他」字典序列化爲它來獲得類似的結果。 Expando基本上是爲你自動化的。
相關問題
- 1. 我可以在Google App Engine應用程序中使用facelets嗎?
- 2. 在Google App Engine中,類可以是Expando和Polymodel嗎?
- 3. 剖析java Google App Engine應用程序
- 4. 刪除Google App Engine應用程序
- 5. Google App Engine上的Java應用程序?
- 6. Google App Engine應用程序錯誤5
- 7. 在Google App Engine應用程序中使用Maven
- 8. Google App Engine可用於驅動桌面應用程序嗎?
- 9. 使用OAuth從Windows應用程序訪問Google App Engine應用程序
- 10. Google App Engine在Hello World應用程序中不起作用
- 11. 我可以在Google App Engine上更改Node.js應用程序的實例類嗎?
- 12. Google Apps Marketplace - 適用於Google App Engine的SSO Java應用程序
- 13. 使用NetBeans將GWT應用程序部署到Google App Engine
- 14. 如何使用密碼保護Google App Engine應用程序?
- 15. 使用Google App Engine的iPhone應用程序
- 16. 使用Google App Engine和GCM的Android客戶端應用程序
- 17. 如何在Google App Engine expando類中創建動態字段?
- 18. 如何在Google App Engine上重用應用程序ID?
- 19. 從Google App Engine訪問Google Drive Python應用程序
- 20. 建立從Windows應用程序到Google App Engine應用程序的OAuth連接
- 21. 如何在Google App Engine python應用程序中有效使用日誌記錄?
- 22. 如何在Google App Engine中使用自定義python庫和應用程序?
- 23. Jetty在Google App Engine上的調試應用程序(localhost)
- 24. 在多個客戶域上運行Google App Engine應用程序
- 25. 如何在Google App Engine上重新部署應用程序?
- 26. Google App Engine:此應用程序不存在
- 27. 在Google App Engine上驗證/更改應用程序區域
- 28. 在Google App Engine上運行基於Django 1.4的應用程序
- 29. 無法在Google App Engine上部署Servlet應用程序
- 30. 在Google App Engine上優化我的Django應用程序
您所概述的另一種選擇是使用PolyModel。 – 2010-10-26 11:07:04
你可以;但是您可能會創建並導入大量模型來處理變體(對於此類示例)。我處理液體,並且有很多*(我們的應用程序使用大約12個)方法來計算音量。 – 2010-10-26 15:25:49
Expando模型的最原始的總結之一。謝謝! – Jon 2014-07-11 14:30:55