2

C# (WinForms) アプリケーションに MVC/MCP パターンを使用しています。

ビジネスロジックでは、次のようなクラスを派生させました

abstract public class Item
{
    abstract double CalculatePrice();
    ...
}

public class Nail : Item
{
    ...
}

public class Car : Item
{
    ...
}

ビジネス ロジックでは、アイテムの派生型は重要ではありません。アイテムの実際のタイプに関係なく、いつでも CalculatePrice() などのメソッドを呼び出すことができます。

しかし、これらのアイテムをユーザーに提示するときに、UI (WinForms) でそのようなアイテムをどのように処理すればよいでしょうか? (そしてもちろん、CarはNailとは異なる方法で提示されます)

  • すべてのタイプのアイテムを処理するために、UI/コントローラーに大きな switch ステートメントを入れたくありません。
  • 実装したくない

    抽象 double ShowMeAtUI()

    これはビジネス ロジックであり、UI を気にするべきではないためです。

では、これを設計するための最もクリーンな好ましい方法は何ですか。

前もって感謝します!!

4

2 に答える 2

1

ビュー の戦略パターンが必要なようですよね?

MVP を使用してこれを解決した 1 つの方法は、サブビューを作成するUserControlことです。サブビューにも Presenter を使用します。メイン ビューを UserControl コンポーネントにモジュール化できる場合、またはそれが理にかなっている場合は、それがオプションになる可能性があります。

親コントロールのコンテナーに追加するサブビューを知るために辞書を実装できます。

または、思い出したように、値がデリゲートであるディクショナリを使用して、親コントロールを指定して特定のサブビューを表示しました。

于 2013-04-05T00:06:26.933 に答える
-3

抽象メソッド ComputePrice が必要な理由がわかりません。アイテムの価格はおそらくデータに含まれています。その場合、必要なのは基本クラス Item のプロパティ Price だけで、任意の Item インスタンスの価格を取得できます。

名前、説明、販売量などの他の一般的なフィールドでも同じように機能します。次に、Price プロパティと同様に、プロパティ (名前、説明、販売量) を Item ベース クラスに追加します。

商品の価格が明示的にデータに含まれておらず、計算する必要がある場合があります。もしそうなら、なぜこの計算が基本クラスになかったのか、私にはまだわかりません。たとえば、顧客に応じて定価を割引する必要があるとします。その場合、Item クラスは割引ルールと購入する顧客を適用します。

ComputePrice が抽象化されなければならない理由を説明したり、各派生クラス (Nail、Car) で特定の実装を必要とする抽象化の他の例を挙げたりすることができるかもしれません。

于 2013-04-04T18:14:23.247 に答える