App Engine - почему существуют классы PhoneNumber, Link, Rating и т. Д.? - PullRequest
10 голосов
/ 06 декабря 2009

Я не нашел никаких причин существования нескольких классов App Engine. Есть PhoneNumber, ссылка, почтовый адрес, GeoPt, рейтинг и т. Д. Почему к ним применяется особый режим? Кажется, у них нет никаких умов - например, гео поиск. Я знаю, что у Link больше места, чем у свойства String, но остальное?

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

Ответы [ 4 ]

7 голосов
/ 06 декабря 2009

Эти типы являются «семантическими» типами. Они присутствуют в API Java для паритета с API Python. В Python API они определяют специальное поведение в отношении метода .to_xml () - например, PhoneNumberProperty сериализуется так:

<property name="foo" type="gd:phonenumber"><gd:phoneNumber>12345-678</gd:phoneNumber></property>
2 голосов
/ 26 декабря 2009

Не уверен насчет java, но в python следующая модель / код (проверено на сервере dev) выдает BadValueError с сообщением «Неверный URL: stackoverflow.com»

class foo(db.model):
    link = db.LinkProperty()

bar = foo()
bar.link = 'stackoverflow.com'

В то время как:

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

Работает нормально.

Я не проверял, но другие свойства также могут или не могут проверять.

2 голосов
/ 06 декабря 2009

Я думаю, что они в основном только для того, чтобы охватить общие случаи и сэкономить время разработчиков. Если во многих приложениях используется поле номера телефона, почему каждый разработчик должен написать их? Разработчик все еще может написать свой собственный, если он хочет / хочет.

1 голос
/ 24 декабря 2009

В основном использование этих типов в ваших моделях позволяет добавлять косвенные метаданные в ваш код. Это может быть полезно, если вы работаете с любым видом универсального рендерера для ваших классов моделей или если вы выполняете проверку пользовательского ввода в ваших моделях.

Например, если вы используете тип PhoneNumber для поля с именем userNumber, ваш рендерер на основе отражений может понять, что он должен автоматически назначить соответствующий валидатор текстовому полю, которое будет его представлять.

С уважением, Павел.

...