【问题标题】:App Engine - why are there PhoneNumber, Link, Rating etc classes?App Engine - 为什么有 PhoneNumber、Link、Rating 等类?
【发布时间】:2010-07-22 04:32:33
【问题描述】:

我没有找到一些 App Engine 类存在的任何理由。有PhoneNumber、Link、PostalAddress、GeoPt、Rating等。为什么要对它们进行特殊处理?他们似乎没有任何智慧 - 例如。地理搜索。我知道 Link 比 String 属性有更多的空间,但是剩下的呢?

见: http://code.google.com/appengine/docs/java/datastore/dataclasses.html

【问题讨论】:

    标签: google-app-engine google-cloud-datastore


    【解决方案1】:

    这些类型是“语义”类型。它们出现在 Java API 中是为了与 Python API 相提并论。在 Python API 中,它们定义了与 .to_xml() 方法有关的特殊行为 - 例如,PhoneNumberProperty 像这样序列化:

    <property name="foo" type="gd:phonenumber"><gd:phoneNumber>12345-678</gd:phoneNumber></property>
    

    【讨论】:

    • 你说使用有什么好处吗?我们必须将类导入查询吗?
    • 我个人不会打扰他们。据我所知,查询根本不使用这些类。
    • +1 尼克所说的话。数据存储中的语义类型是应用引擎开发早期的重点,但后来它变得不那么重要了。到我们推出时,它只是一个小玩意儿,仅此而已。
    【解决方案2】:

    我认为它们主要是为了涵盖常见情况并节省开发人员的时间。如果很多应用程序都使用电话号码字段,为什么要求每个开发人员都必须编写它们?如果需要/想要,开发人员仍然可以编写自己的代码。

    【讨论】:

    • 同意,除了成本似乎是垃圾添加到 API 中,几乎没有什么好处。我们不需要电话类型 - String 可以完美运行,现在我们必须从 PhoneNumber 中获取值。
    • 真的吗? String 可以在没有外部代码的情况下处理美国和英国电话号码之间的差异吗?免责声明:从未使用过这些类,因此无法判断它们是否也使用过。
    • Macha,不幸的是他们没有,这就是重点。它们只是字符串的包装器。
    【解决方案3】:

    不确定 java,但在 python 中,以下模型/代码(在开发服务器上测试)将抛出 BadValueError,并显示消息“无效 URL:stackoverflow.com”

    class foo(db.model):
        link = db.LinkProperty()
    
    bar = foo()
    bar.link = 'stackoverflow.com'
    

    同时:

    bar.link = 'http://stackoverflow.com'
    

    工作正常。

    我没有测试过,但其他属性可能也可能不做验证。

    【讨论】:

      【解决方案4】:

      基本上,在您的模型中使用这种类型可以将间接元数据添加到您的代码中。如果您正在为模型类使用任何类型的通用渲染器,或者您正在对模型执行用户输入验证,这可能会很有用。

      例如,如果您对名为 userNumber 的字段使用 PhoneNumber 类型,则基于反射的渲染器可能会理解它应该自动将相应的验证器分配给将代表它的文本字段。

      问候, 帕维尔。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-04
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-11
        • 1970-01-01
        相关资源
        最近更新 更多