0

以下に示すものはすべて、私の問題を説明するための純粋な擬似コードです。

私のコードには次のデータ構造があります。

// Used to define the ORDERS a customer has placed
List<Orders> myOrders;
Orders
{
  String name
  double quantity
  String location   // there are only 2 possible locations
}

// Used to define the ITEMS we have available
Item
{
  String name
  List<Parts> parts
}

// Used to define the PARTS to make an ITEM
Parts
{
  String name
  double quantity
}

一般的な内訳は素晴らしく明確に見えますが、顧客の要件は私が問題を抱えている場所であり、問​​題を最もよく解決する方法がわかりません...(注-IDではなくNAMEを使用することは相関するのが悪いことを知っています-しかしこれはレガシーシステムです)。

生成する必要があるのは次のとおりです。-各LOCATIONから必要なアイテムごとのすべてのパーツのリスト(2つのみ可能)と注文によって定義された実際の数量-これを印刷する画面に表示します!! 明らかに、同じ場所で同じ部品を複数注文することができ、それらを合計して合計を得る必要があります。

だから私がする必要があるのは:-各注文を取り、アイテムを見つける-各アイテムを取り、部品を見つける-各部品について、その場所を(注文から)定義し、数量を掛ける(注文から)そしてそれはこの場所

最終結果は次のようになります(テーブルグリッドフォームヘッダー)

    Item    Part    QuantityLocation1   QuantityLocation2
    itm1      A         1                    0
              B         4                    2
    itm2      C         0                    5

問題は、PARTクラスにはLOCATIONなどの概念がないことは明らかです...

誰か提案がありますか?私が今見ることができる唯一の解決策は恐ろしいようです...新しいクラス(PartswithLocationなど)を作成し、それに場所を追加してから、このPartsWithLocationですべてのITEMオブジェクト(すでに存在する)を再作成すると、魔法をかけることができます注文ごとに注文して、場所に基づいて部品を見つけ、数量を掛けます。最終結果は、グリッドなど(WPF)で表示できる新しいリストです...しかし、これは醜いように聞こえます...

これは純粋にデザイン関連の質問です。ソースコードを探しているのではなく、問題をより適切に解決するためのアイデアをいくつか探しています。お手数をおかけしますが、よろしくお願いいたします。

4

1 に答える 1

1

オンザフライでデータを正しく操作すれば、現在持っているもの以上のものは必要ありません。

疑似コードでは、次のことを行う必要があります。

foreach(order in orders)
{
   order.partlist = GetItem(order.name).parts; // partlist is a list of Part objects, not stored anywhere.
}
foreach(location in locations)
{
   foreach(order in GetOrdersAtLocation(location))
   {
      foreach(part in order.parts)
      {
         location.partlist += { part.name, part.quantity * order.quantity }; // partlist is a list of parts and quantities, to be displayed.
      }
   }
 }

私は LINQ でこれを行いますが、コードではなくデザインの回答を求めたので、これは多かれ少なかれアンラップするものです。

于 2013-01-15T22:33:56.063 に答える