2

我正在尝试用 Delphi 2009 实现一个轻量级的 mvp 框架。

视图是被动的,但支持数据绑定(通过接口属性)。

我面临着一个两难境地:我有几个非常相似的视图/演示者/模型三合会,即:

订单表单和客户表单 = 行为和逻辑相同,但数据绑定的数据源不同,表单标题也不同。数据源是我所有模型的公共属性,所以这不是问题,要设置表单标题,我不得不在我的演示者InitView方法中对其进行硬编码

一切都很好,但我的情况是我有几个非常相似的简单 mvp 三元组。我想重构它,但在这种情况下,我必须将一些参数传递给 mvp 构造函数。

到目前为止,我正在这样做:

  1. 创建视图
  2. 创建模型
  3. 在构造函数中创建演示者并注入模型和视图

事实上,我面临着一个选择:

  1. 有一些非常通用的视图/演示者,像那样使用它们,但在构造函数中注入 1 或 2 个参数
  2. 拥有一些视图/演示者超类,并从中派生我所有类似的视图/演示者,并在覆盖的方法中设置一些特定值。

你能给我一些提示/建议吗?

(对不起,如果我不是很清楚)

4

3 回答 3

1

我只会在需要时创建一个带有参数和子类的通用视图/演示器。

于 2009-07-14T11:51:05.787 回答
1

另一种方法(以及我曾经解决过这个问题的方法,所以它工作得很好)是在模型中构建一个通用的“元数据”接口,然后视图(接口或通过类继承)然后在你的主持人。我选择为我的模型使用继承,为我的视图使用接口(在现有表单上添加接口比要求全面继承表单/框架更容易)。在我的解决方案中,演示者的构造函数采用了 3 个参数,即模型、视图和“MVP 名称”。我使用 MVP 的名称来加载特定于当前场景的设置。

于 2009-07-14T16:15:32.327 回答
1

弗雷德,

我将选择 1 和 2 的方式是拥有一个包含通用行为的抽象视图/呈现器,并创建可能由子类实现的特定行为的抽象函数。

例如,

  public abstract class AbstractPresenter{
      // subclass will be implemented 
      public abstract void InitView(Model model, View view);
  }

然后你可能有子类,OrderFormPresenter 和 CustomerFormPresneter 从 AbstractPresenter 扩展。

public OrderFormPresenter extends AbstractPresenter{
    public void InitView(Model model, View, view){
      // do something specific values 
    }
}

public CustomerFormPresenter extends AbstractPresenter{
    public void InitView(Model model, View, view){
      // do something specific values 
    }
}

如果方向错误,请纠正我。我希望它有所帮助。

老虎

于 2009-07-14T00:02:27.990 回答