1

小売業者向けのシステムを設計しているシナリオがあります。これは適切なライブ アプリケーションではなく、私の OO 設計スキルが正しいかどうか、および私の考えが正しいかどうかを確認するための単なるシナリオです。私はまだここで学んでいます。私はこれをc#でやっています。

シナリオは次のとおりです。

ステーショナリー製品を販売する小売業者は、さまざまな固定数のサプライヤーから最良の価格を選択し、そのサプライヤーに注文するシステムを設計したいと考えています。簡単にするために、文房具製品を同じ会社の 1 つの製品、XYZ ペンに絞りました。各供給業者は、尋ねられたときに XYZ ペンの見積もりを提供し、小売業者のシステムがさまざまな販売業者から最良の価格を選択して、その販売業者に注文します。

アプローチ 1:

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

アプローチ 2:

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

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

どう思いますか?

OOAD をテストするための最適なシナリオがここにない可能性があります。私も一緒に作業できるいくつかのサンプル シナリオがあればいいのにと思います... 可能であれば、デザインのヒントがあれば。

御時間ありがとうございます。

4

2 に答える 2

3

サプライヤごとに動作が異なる場合は、オプション1の方が適切です。この場合、オプション2を使用する方が、単純であるため、より適切な選択であると思われます。

何かを解決する方法がわからないときに私が通常行うことは次のとおりです。

  • 私の要件をリストしてください:サプライヤーセットを与えられたアイテムの最良の価格を入手してください。
  • 候補オブジェクトのリストを作成します:サプライヤー、アイテム、小売業者など。
  • 私が理にかなっていると思う関係を持つクラスを描画またはレイアウトする
  • 迷子になったとき、要件のメインクラスのコーディングを開始します。この場合は、RetailersとGetBestRetailer()メソッドになります。

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

難しいと思われるものに遭遇するたびに、必要な答えを返すメソッドを作成するか、それがより理にかなっていると思われる場合は新しいクラスを作成することによって、それを抽象化します。演習として、「難しい/複雑な」部分は他の誰かによってコード化されると思い、メソッドまたはクラスに委任することで、現在焦点を当てている問題の部分からそれを分離します。

hth

于 2011-08-04T10:54:51.103 に答える
3

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

于 2011-08-04T10:53:09.883 に答える