0

モデルクラスと実質的に同形のデータベースを持っているため、それらを作成するのはほとんど時間の無駄のように思えます。私は (orm ではなく) sqlalchemy コアを使用しており、次の例のようなゲートウェイ クラスを作成しました。

class BanGate(Gateway):

    def __init__(self):
            super(BanGate, self).__init__('ban')

    def ban_user(self, user, group, exp):
            data = dict(user_id=user, group_id=group, expires=exp)
            self._table.insert(values=data).execute()

    def unban_user(self, user, group):
            cond = and_(self._table.c.user_id == user, self._table.c.group_id == group)
            self._table.delete(whereclause=cond).execute()

class ForumGate(Gateway):

    def __init__(self):
            super(ForumGate, self).__init__('forum')

    def create_forum(self, group, user, title, desc):
            data = dict(group_id=group, creator=user, name=title, description=desc)
            self._table.insert(values=data).execute()

    def delete_forum(self, forum):
            stmt = (self._table.c.forum_id == forum)
            self._table.delete(whereclause=stmt).execute()

これらのゲートウェイを使用して状態を保持し、保存するための「禁止」または「フォーラム」クラスを作成するのは、時間の無駄のように思えます。コントローラについては、単にリクエスト オブジェクトからデータを取得し、これらのゲートウェイ オブジェクトを直接使用することを考えていますが、これは賢明ですか? ページのほとんどのデータは操作する必要がなく、保存および/または読み取りを行うだけなので、モデル クラスを使用する必要はないようです。

また、ゲートウェイ内で使用されるテーブル クラスは自動ロード機能を使用するため、データベース スキーマを定義しませんでした。

では、基本的にデータを永続化するにはどうすればよいでしょうか。これらのゲートウェイ オブジェクトに渡されるモデル クラスを作成する必要がありますか?それとも、ゲートウェイ オブジェクト データをリクエスト オブジェクトから直接渡すだけでよいでしょうか?

(また、「gatway」とはhttp://martinfowler.com/eaaCatalog/tableDataGateway.htmlを指しています)

4

1 に答える 1

2

この場合、すべての insert()/update() 構造などを手作業でコーディングする必要があるため、ORM を再発明しています。これは、そこにある永続性とクエリ機能を使用するよりもはるかに多くの作業です。「時間の無駄」がコードで定義されたクラスを持っている場合、リフレクションを使用したい場合、SQLSoupのようなツールを使用するか、似たようなものをロールするか、おそらくDeferredReflectionを使用する必要はありません。どの ORM 構成でも、Python クラスは type() を使用してオンザフライで作成できるため、ORM を動的に活用できます。

于 2013-04-03T23:38:45.237 に答える