2011-01-18 11 views
1

OrderクラスとOrderManagerServiceクラスがあるとしましょう。オブジェクト指向設計を使った混乱..ヘルプが必要

Orderクラス:[状態に作用するいくつかの州および方法]

  1. 項目は[]
  2. 状態

OrderManagerServiceクラス:[状態がありません。私たちは後ろにリレーショナルDBを使用しているとしましょう:のみ

  1. createOrder
  2. getOrder

質問]静的メソッド以下。私たちの目標は、注文ステータスを更新することです。さて、ステータスをDBで更新する必要があります。私の懸案事項は、updateStatusメソッドを置く場所です。

  1. OrderManagerService.getOrderを呼び出すと、Order.updateStatusが呼び出されますか?
  2. 、またはOrderManagerService.updateOrderStatusとして新しいメソッドを作成しますか?

よく、第1のオプションはカプセル化の後にあるようです。しかし、個人的には、エンティティオブジェクトからDAOレイヤーを呼び出すことになるかもしれないので、私はそれを気に入っていません(おそらく、大丈夫かもしれません)。適切なデザインの選択肢とその理由をお聞かせください。どんな助けでも大歓迎です。

答えて

2

オプション2 - OrderManagerService.updateOrderStatusという新しいメソッドを作成しますか?

なぜですか?

あなたのサービス層は、作業の論理的なビジネスユニットをカプセル化しなければならないし、あなたのケースでUOWは

  1. あるオブジェクト
  2. のステータスが変化
  3. を存続更新
  4. DB
  5. から順に取得します

であり、トランザクションでupdateOrderStatus(...)を区切ります。サービスはまだステートレスです。

-1

別のOrderManagerServiceクラスが存在するのはなぜですか?私はこれらすべての方法を注文に鳴らした。

(それはおそらく、理論的に正しいか、ギャング・オブ・4準拠のデザインパターンではないのですが、それはより多くの意味になるだろうので、私は気をdn't。)

+0

hmm ..注文クラスインスタンスは特定の注文を表します。我々はすべてを組み合わせたとしよう。注文インスタンスを削除したい場合、醜いかもしれません。別のインスタンスから注文インスタンスを削除するように見えるためです。うーん、私はこのルートに行きたくないかもしれない。 – Vick

+0

どのように? orderInstance =新しいオーダー。 orderInstance.delete; ? – Satya

0

私はOrderManagerServiceは、Orderクラス項目の配列を持つべきだと思います。この方法で、各アイテムを繰り返し処理し、ステータスを更新することができます。また、1つの注文アイテムにアクセスするために探している場合は、Orderクラスを介して直接そのアイテムにアクセスし、そこで更新してください。

いずれの場合も、現在の設定では、updateStatus()はOrderクラスにする必要があります。

+0

彼はオブジェクトを含むデータベースを持っています...オブジェクトの配列は、DBとの同期を保つのが難しく、不要です。 – Cuga

+0

@Cuga、私は各項目がそれ以上の注文(すなわち、バックオーダーの項目など)に対して自分のステータスであると解釈しました。注文状態が肯定であると仮定すると、その配列は不要です。私の悪い。 – RDL

0

observer pattern

updateStatus()は、OrderManagerServiceクラスで監視されるOrderクラスになります。

ステータスを変更するたびに、マネージャはそれを見て、必要に応じていくつかのアクションを実行します(たとえば、DB内のステータスを更新します)。

インスタンスを作成してgetOrder()メソッドで返すときに、マネージャはOrderにバインドできます。

注文のインスタンスが破棄された場合(管理されていない言語のみ)、マネージャから注文を取り消す方法を実装することもできます。

0

あなたの質問のタイトルには「オブジェクト指向設計を使用する」が含まれているため、オブジェクトはデータに加えて動作をカプセル化することになっているため、状態遷移ロジックをOrderに配置します。

サービスに含まれるすべての動作をAnemic Domain Modelと呼ぶことができます。それは悪いことかどうかを判断するためにあなた次第です。それ以上の議論があります。

関連する問題