Delphi MVP:其他构造函数';s参数比视图和模型?

Delphi MVP:其他构造函数';s参数比视图和模型?,delphi,design-patterns,dependency-injection,mvp,Delphi,Design Patterns,Dependency Injection,Mvp,我正在尝试用Delphi2009实现一个轻量级mvp框架 视图是被动的,但支持数据绑定(通过接口属性) 我正面临一个困境: 我有几个非常相似的视图/演示者/模型三元组,即: 订单表单和客户表单=行为和逻辑相同,但数据绑定的数据源不同,表单标题也不同。数据源是我所有模型的公共属性,因此这不是问题,要设置表单标题,我必须在presenterInitView方法中对其进行硬编码 一切都很好,但我的情况是,我有几个简单的mvp三元组非常相似。我想重构它,但在这种情况下,我必须将一些参数传递给mvp构造函

我正在尝试用Delphi2009实现一个轻量级mvp框架

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

我正面临一个困境: 我有几个非常相似的视图/演示者/模型三元组,即:

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

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

到目前为止,我是这样做的:

  • 创建视图
  • 创建模型
  • 创建演示者并在构造函数中插入模型和视图
  • 事实上,我面临着一个选择:

  • 对于一些非常通用的视图/演示者,可以这样使用它们,但在构造函数中插入1或2个参数
  • 拥有一些视图/演示者超类,并从中派生出所有类似的视图/演示者,并在重写的方法中设置一些特定值
  • 你能给我一些提示/建议吗

    (如果我不太清楚,很抱歉)弗雷德

    我将以一种方式选择1和2,即具有包含泛型行为的抽象视图/呈现者,并创建可能由子类实现的特定行为的抽象函数

    比如说,

      public abstract class AbstractPresenter{
          // subclass will be implemented 
          public abstract void InitView(Model model, View view);
      }
    
    然后,您可能会有来自AbstractPresenter的子案例、OrderFormPresenter和CustomPerformPresneter扩展

    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 
        }
    }
    
    如果方向错了,请纠正我。 我希望有帮助


    Tiger

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

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

    Tiger,谢谢您的回答。您的解决方案似乎是我的第2条。我同意这是一种干净的方法,但是创建几个子类只是为了设置表单标题或表单上的标签,这与我现在看到的有点过分。谢谢你的帮助。