2

I'm using a MVC/MCP pattern for my C# (WinForms) application.

In the business logic I have derived classes like

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

public class Nail : Item
{
    ...
}

public class Car : Item
{
    ...
}

For the business logic the derived type of an item doesn't matter. I always can call methods like CalculatePrice() no matter what type the item really is.

But How do I handle such items at the UI (WinForms) when presenting these items to the user? (and of course a Car is presented differently than a Nail)

  • I do not want to have a big switch statement in the UI / controller to handle all types of items.
  • I do not want to implement a

    abstract double ShowMeAtUI()

    method in the item class, because this is business logic and it should not care about UI stuff.

So what is the cleanest preferred way to design this.

Thanks in advance!!

4

2 回答 2

1

在我看来,您需要视图的策略模式,对吗?

我使用 MVP 解决此问题的一种方法是创建UserControl子视图。即使是子视图,我也会使用演示者。如果您可以将主视图模块化为 UserControl 组件,或者如果这样做有意义,那么这可能是一种选择。

您可以实现一个字典来知道将哪个子视图添加到父控件的容器中。

或者,我记得,我确实使用了一个字典,它的值是一个委托来显示给定父控件的特定子视图。

于 2013-04-05T00:06:26.933 回答
-3

我不明白你为什么需要抽象方法 ComputePrice。商品的价格大概在数据中。如果是这种情况,那么您只需要基类 Item 中的属性 Price 来获取任何 Item 实例的价格。

对于其他常见字段(例如名称、描述、销售量等)也是如此。然后,与 Price 属性类似,您将向 Item 基类添加一个属性(Name、Description、SalesVolume)。

也许某件商品的价格在数据中没有明确显示,必须进行计算。如果是这样的话,我仍然不明白为什么这个计算不能在基类中。例如,必须根据客户对标价进行折扣。在这种情况下,Item 类应用折扣规则和进行购买的客户。

也许您可以解释为什么 ComputePrice 必须是一个抽象和/或提供其他抽象示例,这些示例需要在每个派生类(Nail、Car)中进行特定的实现。

于 2013-04-04T18:14:23.247 回答