如何使用C#winforms中的MVP模式将多个表中的数据显示到我的视图中?

时间:2014-10-21 08:28:11

标签: c# winforms mvp architectural-patterns

如何使用C#winforms中的MVP模式将多个表中的数据显示到我的视图中?

说我有以下表格:

  1. 水果
  2. 颜色

    Table definition:  
    +----------+  
    | Fruit    |  
    +----------+  
    | Id       |  
    | Name     |  
    | Color_Id |  
    +----------+  
         |∞
         |
         |1
    +----------+  
    | Color    |  
    +----------+  
    | Id       |  
    | Name     |  
    +----------+  
    
    Table contents:  
    
    Fruits  
    +-----+--------+----------+  
    | Id  | Name   | Color_Id |  
    +-----+--------+----------+  
    | 10  | Apple  | 70       |  
    | 20  | Orange | 80       |  
    | 30  | Grapes | 90       |  
    +-----+--------+----------+  
    
    Colors  
    +-----+--------+  
    | Id  | Name   |  
    +-----+--------+  
    | 70  | Red    |  
    | 80  | Orange |  
    | 90  | Violet |  
    +-----+--------+  
    
  3. 然后在我的解决方案中,我为每个表创建了类,即Fruit和Color类,它们有自己的getter和setter以及表示数据库中表的其他细节。

    然后我还为Fruit和Color创建了两个模型。

    因此,如果我想创建一个显示有关Color的记录的视图,我会使用我为Color创建的模型来检索颜色集合(例如List<Color>)。 如果我使用DataGridView显示该记录,我会得到类似如下的内容:

        +-----+--------+  
        | Id  | Name   |  
        +-----+--------+  
        | 70  | Red    |  
        | 80  | Orange |  
        | 90  | Violet |  
        +-----+--------+  
    

    对于Fruit记录,我可以使用上面相同的方法,但我需要显示颜色名称而不是颜色ID,如下所示:(假设我使用的是DataGridView或自定义控件)

        +-----+--------+----------+  
        | Id  | Name   | Color    |  
        +-----+--------+----------+  
        | 10  | Apple  | Red      |  
        | 20  | Orange | Orange   |  
        | 30  | Grapes | Violet   |  
        +-----+--------+----------+  
    

    我想我可以为它创建另一个类并命名为“FruitColor&#39;然后赋予它与上面的Fruit类相同的属性,但不是具有颜色id属性,而是用颜色名称代替它......但是我不确定它是否是在MVP中正确的做事方式。我想我应该问你们有关如何正确行事的任何提示......

    我没有在我的项目中使用ORM,因为我想了解它是如何手动完成的......但我也很感激与使用ORM相关的任何帮助。我也在3周前开始学习MVP,所以我真的希望得到任何帮助。

1 个答案:

答案 0 :(得分:2)

检索Fruit时,您应该使用SQL中的JOIN查询颜色:

RETRIEVE f.*, c.name as color_name
FROM Fruits f
INNER JOIN Colors c
ON f.Color_Id = c.Id

然后,将您获得的结果转换为Fruit,因为您可能已经在做了。 但是,这会要求您展开Fruit类,以便它对颜色string变量具有name属性,或者只添加包含整个颜色的属性:

public class Fruit
{
   public int Id { get; set; }
   public string Name { get; set; }
   public Color Color { get; set; }
}