3

1つのアプリケーションにクラスがあります-変​​更できません(レガシー)-アセンブリ(DLLファイル)内にあります:

public class ShippingMethod
{
    public string ShipMethodCode { get; set; }
    public string ShipMethodName { get; set; }
    public decimal ShippingCost { get; set; }

    public List<ShippingMethod> GetAllShippingMethods()
    {
    ......
    }
}

そのアセンブリ(DLLファイル)を参照している2番目のアプリケーションがあり、ドロップダウンにすべての配送方法を入力する必要があります。例:「UPS-3.25ドル」

問題は、異なる通貨に対して正しいフォーマットを使用する必要があるということです。例:CountryIDと呼ばれるパラメーターに応じて3.25ドルまたは3.25ユーロ。

String DisplayMoney(Decimal Amount, Integer CountryID)金額の正しい形式を返す関数を作成しました。

次に、この機能をすべての配送方法に適用して、新しいリストに保存する必要があります。これを行うための最良の方法は何ですか?

次のように、LocalizedShippingMethodsという別のクラスを作成できます。

public class LocalizedShippingMethod
{
    public ShippingMethod ShipMethod { get; set; }
    public string LocalizedShippingCost { get; set; }
}

これはこれを達成するための最良の方法ですか?継承を使用してこれを行うためのより良い方法はありますか?また、継承を使用する場合、最初のリストから新しいリストに値を取得するにはどうすればよいですか?

4

3 に答える 3

2

それは確かにそれを行うための良い方法です。非常に簡単なLinqクエリを使用して、古いクエリをList新しいクエリにプルできます。

List<LocalizedShippingMethod> Translate(List<ShippingMethod> oldList)
{
  return oldList.Select(a => new LocalizedShippingMethod
     {
         // Initialize properties according to however you translate them
     }).ToList();
}

さらに、これをより合理的かつ明白にするために、翻訳を支援するために次のいずれかを行うことができます。

  • LocalizedShippingMethodを取り込んでShippingMethodプロパティを適切に設定するためのコンストラクタを作成します
  • LocalizedShippingMethodを取り込んでShippingMethod初期化されたものを返す静的メソッドを作成しますLocalizedShippingMethod
  • LocalizedShippingMethodから変換する演算子を作成しますShippingMethod
  • に拡張メソッドを作成し、それをShippingMethod呼び出してToLocalized()LocalizedShippingMethod
于 2013-02-06T17:08:15.100 に答える
0

これを行うための最良の方法は、あなたにとって最適な方法です。 あなたがこのコードを維持しなければならない人であるならば、あなたの人生を将来最も簡単にするものは何ですか?

その質問に答えたら、それが最善の解決策です。

于 2013-02-06T17:09:18.877 に答える
0

ShippingMethod クラスの拡張メソッドを作成するとどうなるでしょうか。

于 2013-02-06T17:07:24.403 に答える