App Engine - почему существуют классы PhoneNumber, Link, Rating и т.д.?
Я не нашел причин для существования нескольких классов App Engine. Там есть PhoneNumber, Link, PostalAddress, GeoPt, Рейтинг и т.д. Почему эти специальные обращения? У них, похоже, нет никаких умений - например. гео-поиск. Я знаю, что Link имеет больше места, чем свойство String, но остальное?
См:
http://code.google.com/appengine/docs/java/datastore/dataclasses.html
Ответы
Ответ 1
Эти типы являются "семантическими" типами. Они присутствуют в Java API для контроля четности с API Python. В API Python они определяют особое поведение в отношении метода .to_xml() - например, PhoneNumberProperty сериализуется следующим образом:
<property name="foo" type="gd:phonenumber"><gd:phoneNumber>12345-678</gd:phoneNumber></property>
Ответ 2
Я думаю, что они в основном просто предназначены для покрытия распространенных случаев и экономят время разработчиков. Если в большом количестве приложений используется поле номера телефона, зачем требуется, чтобы каждый разработчик писал их? Разработчик все еще может написать свои собственные, если им нужно/нужно.
Ответ 3
Не уверен в java, но в python следующая модель/код (протестированная на dev-сервере) выкинет BadValueError с сообщением "Invalid URL: stackoverflow.com"
class foo(db.model):
link = db.LinkProperty()
bar = foo()
bar.link = 'stackoverflow.com'
В то время как:
bar.link = 'http://stackoverflow.com'
Прекрасно работает.
Я не тестировал, но другие свойства могут или не могут также выполнять валидацию.
Ответ 4
В основном использование этих типов в ваших моделях позволяет добавлять косвенные метаданные в ваш код. Это может быть полезно, если вы работаете с любым универсальным рендерером для своих классов моделей или если вы выполняете проверку ввода пользователя на своих моделях.
Например, если вы используете тип PhoneNumber для поля с именем userNumber, ваш рендеринг, основанный на отражении, может понять, что он должен автоматически назначать соответствующий валидатор текстовому полю, которое будет его представлять.
С уважением,
Павел.