2009-12-06 6 views
10

いくつかのApp Engineクラスが存在する理由が見つかりませんでした。 PhoneNumber、Link、PostalAddress、GeoPt、Ratingなどがあります。これらの特別扱いはなぜですか?彼らはスマートを持たないようです。ジオサーチ。私はリンクが文字列プロパティより多くのスペースを持っていることを知っているが、残りは?App Engine - なぜPhoneNumber、Link、Ratingなどのクラスがありますか?

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

答えて

7

これらのタイプは「意味」タイプです。それらはPython APIと同等のJava APIに含まれています。 PythonのAPIで、彼らは.to_xml()メソッドにに関して特別な動作を定義する - 例えば、PhoneNumberPropertyは次のようにシリアライズ:基本的に、あなたのモデルでは、このタイプを使用して

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

使い方に利点があるとお考えですか?クラスをクエリにインポートする必要がありますか? –

+2

個人的には気にしません。私が知っている限り、クエリはクラスをまったく使用しません。 –

+0

よかった、ありがとう。 –

2

私は、彼らは一般的なケースをカバーし、開発者の時間を節約するためにそこにほとんどだと思います。多くのアプリで電話番号フィールドを使用している場合、なぜ各開発者に書き込む必要がありますか?開発者は、必要に応じて自分自身を書くことができます。

+0

費用はほとんど例外なくAPIに追加されているようです。電話の種類は必要ありません。文字列は完全に機能し、PhoneNumberからgetValueを取得する必要があります。 –

+0

本当ですか?文字列は、外部コードなしで米国と英国の電話番号の違いを処理できますか?免責事項:決してそれらのクラスを使用していないので、そのクラスのどちらかを判断できません。 – Macha

+1

マチャ、残念ながら彼らはそうではありません、それは全体のポイントです。彼らは文字列のラッパーです。 – Domchi

1

はあなたに間接的なメタデータを追加することができますコード。これは、モデルクラス用の汎用レンダラーを使用して作業している場合や、モデルのユーザー入力の検証を実行している場合に便利です。

たとえば、userNumberという名前のフィールドにPhoneNumberタイプを使用している場合、リフレクションベースのレンダラーは、それを表すテキストフィールドに対応するバリデーターを自動的に割り当てる必要があることを理解することができます。

よろしく、 Pavel。

2

ないのjavaが、Pythonでは以下のモデル/コード(のdevのサーバー上でテスト)について確認メッセージ "無効なURL:stackoverflow.com" と、BadValueErrorがスローされますが

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

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

ながら:

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

正常に動作します。

私はテストしていませんが、他のプロパティは検証を行う場合もありません。

関連する問題