2012-04-18 18 views
0

今は複数のユーザーエンティティを一度に操作する必要があるプロジェクトの状況にあります。たとえば、一度に50人のユーザーを無効にします。通常、我々はなかったことをゲートウェイデザインパターン:ゲートウェイ内から複数のエンティティを編集する方法

ゲートウェイ

  • クエリで複数のユーザーによるクエリ

OR

  • ループを持つゲートウェイによって一度にデータ
    • 負荷実体
    • は、()

のセーブデータ

  • 検証
  • を操作するしかし、それはベストプラクティスのソリューションではありません。

    最初のオプションは、データを検証する可能性を排除します。 すべてのユーザーに対してエンティティを繰り返し処理する必要があるため、2番目の実装は良好ではありません

    何をお勧めしますか?私たちは、高速な解決策を望んでいるだけでなく、保存の解決策もあります。

    誰かが適切な解決策を知りたいと思っています。ありがとう!

    我々はあなたが負荷が軽減されるので、一度にループに一致する複数のユーザーをロードする機能を持つオブジェクトRealationalマッパー(ORM)が必要

  • 答えて

    0

    を使用しています。

    最後に保存操作に似ています。変更されたすべてのエンティティは、作業単位で一度に格納する必要があります。

    使用しているORMの製品マニュアルを確認するか、そのベンダーに連絡して、開発をサポートする機能を確認してください。

    +0

    違いは、Zend_Dbのカスタムソリューションを使用していることです。 Zend_Dbは重いので私たちは自分で作った。しかし今、私たちは複数のエンティティを管理する必要がある場合があります。通常、ゲートウェイで処理するための回避策がありました。しかし、これは私たちが望む実装ではありません。 ITはゲートウェイのためのものではありません。しかしそのためには、正しいデザインパターンを見つける必要があります。私たちはORMをもう使用しないので、それが側面であるように –

    +0

    PofEAAの本(http://martinfowler.com/eaaCatalog/)は、あなたのような問題をカバーするデータベース関連のパターンについてより長い章を持っています。私はそこに見る時間を投資しています。なぜなら、これらの問題に対するアプローチがうまくいっているからです。 – hakre

    0

    私は最初の選択肢を提案します。 1回のクエリですべてを一度に更新します。しかし、どのような種類のデータ検証をしたいのかは記述していません。たぶん、データベーストランザクションを開始し、コミットする前に「ユーザー無効化クエリ」の結果を検証するために2番目のクエリを発行できますか?

    +0

    ユーザーを無効にすることも可能です。しかし、他のテーブルの情報を更新するような、より多くのことをしたいとき。ユーザーがデータを入力する場所。誤った入力をしないようにする必要があります。エンティティでは、すべてのフィールドに検証があり、何が空であるか、フィールドがどれくらいの長さになることができます。どのような種類のデータ型。あなたが40インチの数を持っている場合、例を挙げてください。それが整数であることを知る必要があります。それが実体でした。ゲートウェイはその電源を持っていない –

    +0

    あなたはサービス層を追加することができます。あなたはあなたのコントローラからサービス層を呼び出します。サービスからデータベーストランザクションを開始し、別のテーブルゲートウェイを呼び出します。すべてのゲートウェイ呼び出しが成功すると、サービスでトランザクションをコミットします。 – Leven

    +0

    これが適切な解決策であるかどうかを見ていきます。いいですね。正しい方法でAPIに収まることを願っています。ご回答有難うございます。私はいつももっと良いオプションを探しています:-) –

    関連する問題