0

これは、 Tornadoフレームワークを使用して json Web サービスを構築する最初の試みであり、モデルの設計について質問があります。

現在、このようなオブジェクトを表すすべてのモデルを含むモデル ファイル (models.py) があります (これは論理的な表現です)。

class person():
  name = StringField()
  age  = IntField()

class phone():
  number = IntField()
  person = ReferenceField(Person)

person.is_granted()、person.is_admin()( など) のように実装するメソッドがたくさんあるので、これらのオブジェクトでメソッドを宣言する (アプリケーション設計で) 最善の方法は何かと思っていましたが、それらを拡張する必要がありますか? それともモデルファイル定義でメソッドを宣言するのはきれいですか?

回答ありがとうございます。

4

1 に答える 1

0

一般に、すべてのモデルに共通のメソッドを実装する共通の祖先 (継承の観点から) が必要です。通常は、シリアライゼーション/デシリアライゼーション、データベース API の抽象化、検索、アクセス制御などの処理になります。ほとんどの場合、ORM はそのような祖先を提供しますが、アプリケーション固有のロジックで拡張する必要がある場合もあります。

モデルに関連するメソッドをオブジェクトに配置することをお勧めします。特に、このロジックをさまざまなハンドラー (ユーザー モデルのパスワード チェック、変更、生成など) で使用する必要がある場合は、一連の認証関連のハンドラーとモデルから使用できます。は、このロジックを配置するのに適した場所です)。一方、他の属性 (ロールなど) に特定の値が含まれているかどうかを確認するis_admin()のようなものは、 @propertyデコレーターでラップして、通常のブール属性のように見せることができます。

このアプローチを使用すると、コード内でデータ固有のロジックをアプリケーション固有のロジックから分離できるため、この 2 つのモジュール間で賢く分散できます。プロジェクトが成長すると、handlers.py と models.py から、アプリケーションのさまざまな部分を分離し、コードをより読みやすくするための一連のサブモジュールを含む handlers と models パッケージに進化させたいと思うでしょう。

PS: ちなみに、これは Tornado や ORM とはまったく関係ありません。たとえば、プレーン データベース API でこれに似たコード レイアウトを使用しています。

于 2011-11-06T16:58:44.660 に答える