2011-08-04 3 views
1

私は小売業者のためのシステムを設計しているシナリオを持っています。これは適切なライブアプリケーションではなく、私のオブジェクト指向設計スキルが正しいか、正しく考えているかどうかを確認するシナリオです。私はまだここで学んでいます。私はC#でこれをやっています。私のOOPデザインは正しいですか?

シナリオはこれです:

静止製品を販売する小売業者が納入業者の彼の各種固定数から最適な価格を選択して、そのサプライヤーから順を行いますシステムを設計したいと考えています。わかりやすくするために、私は静止している製品を同じ会社の1つの製品(XYZペン)に切断しました。サプライヤのそれぞれは、尋ねられたときにXYZペンの見積もりを提供し、小売業者システムは様々な売り手から最良の価格を選択し、その売り手から注文する。

アプローチ1:

  1. サプライヤーと各サプライヤの実装のための抽象クラスを作成します。
  2. 各サプライヤの実装にはPlaceOrder()メソッドとコストプロパティがあります。
  3. DataLayerは、各サプライヤ実装のコストプロパティを設定します。
  4. 各実装を最適な価格で評価し、適切な実装を注文するCheckBestRetailerクラスを作成します。

アプローチ2:

  1. コストプロパティとPlaceOrder()メソッドを持つタイプのサプライヤーのリストを作成します。
  2. 各サプライヤに対して、データレイヤは新しいサプライヤタイプをリストに追加し、データベースから取得したコストの詳細を設定します。
  3. CheckBestRetailerクラスはそのリストをループし、各オブジェクトを最良の価格で評価し、適切な実装を注文します。

上記の2つのうち、私はアプローチ1がOOPに近いと感じていますが、私には固定数のサプライヤがあると思います。データベースから取り出されたデータに応じてサプライヤの数が変わる可能性がある場合は、アプローチ2がより優れています。

あなたはどう思いますか?

ここで私のOOADをテストするのに最適なシナリオがないかもしれません。設計上のヒントがあれば可能な限り私が一緒に作業することができるサンプルシナリオをいくつか用意したいと思います。

お時間をいただきありがとうございます。

答えて

3

オプション1は、各サプライヤごとに異なる動作をする場合に適しています。この場合は、オプション2を使用する方が簡単な方がよいと思われます。私は何かを解決する方法がわからないとき、私は通常、何

は次のとおりです。

  • 一覧私の要件:サプライヤーのセットの指定のアイテムについて、最高の価格を取得します。、私は私が私が要件のための主なクラスをコーディングを開始失っていたとき、私は感覚
  • を作る考えて関係を持つサプライヤー、アイテム、小売業者など
  • ドローやレイアウトクラス:
  • は、候補オブジェクトのリストを作成します。この場合、RetailersメソッドとGetBestRetailer()メソッドになります。

あなたが間違っているかどうかは関係ありません。あなたが達成しなければならないことを理解するためのブレーンストーミングの一種であり、あなたがそれを見つけるためにどのようなオプションを見つけるかです。

難しいと思われるものが出現するたびに、必要な解答を返すメソッドを作成するか、それがより適切と思われる場合は新しいクラスを作成することによって抽象化します。 練習として、私は、「難しい/複雑な」部分が他の誰かによってコーディングされると思うし、メソッドやクラスに委任することで、問題の部分からそれを分けて、今焦点を当てています。

HTH

3

私はアプローチ2が良いと言います。 サプライヤの動作がほぼ同じであるため、サプライヤごとに固有のクラスを作成する必要はありません。

+0

あなたはそれに私を打つ気:)私は割引を提供するいくつかのサプライヤーのような新しい複雑さを紹介し、他の人がしないとどう –

+0

。その後、どちらがより優れていますか? – user20358

+1

デコレータを使用して特定のクラスに多くの動作を追加することができます。多くのオプションがあります。現在、どの問題を解決する必要があるかによって異なります。割引はすべてのサプライヤに適用される可能性があります。オプション2と単一の場合..あなたがそれらが起こるだろうと知っているまで、あなたのデザインは将来の要件について考えることを複雑にしようとしないでください。 –

関連する問題