Delphi MVP:其他构造函数';s参数比视图和模型?
我正在尝试用Delphi2009实现一个轻量级mvp框架 视图是被动的,但支持数据绑定(通过接口属性) 我正面临一个困境: 我有几个非常相似的视图/演示者/模型三元组,即: 订单表单和客户表单=行为和逻辑相同,但数据绑定的数据源不同,表单标题也不同。数据源是我所有模型的公共属性,因此这不是问题,要设置表单标题,我必须在presenterDelphi MVP:其他构造函数';s参数比视图和模型?,delphi,design-patterns,dependency-injection,mvp,Delphi,Design Patterns,Dependency Injection,Mvp,我正在尝试用Delphi2009实现一个轻量级mvp框架 视图是被动的,但支持数据绑定(通过接口属性) 我正面临一个困境: 我有几个非常相似的视图/演示者/模型三元组,即: 订单表单和客户表单=行为和逻辑相同,但数据绑定的数据源不同,表单标题也不同。数据源是我所有模型的公共属性,因此这不是问题,要设置表单标题,我必须在presenterInitView方法中对其进行硬编码 一切都很好,但我的情况是,我有几个简单的mvp三元组非常相似。我想重构它,但在这种情况下,我必须将一些参数传递给mvp构造函
InitView
方法中对其进行硬编码
一切都很好,但我的情况是,我有几个简单的mvp三元组非常相似。我想重构它,但在这种情况下,我必须将一些参数传递给mvp构造函数
到目前为止,我是这样做的:
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条。我同意这是一种干净的方法,但是创建几个子类只是为了设置表单标题或表单上的标签,这与我现在看到的有点过分。谢谢你的帮助。