我正在尝试使用Delphi 2009实现轻量级mvp框架。
视图是被动的,但支持数据绑定(通过接口属性)。
我正面临困境: 我有几个非常相似的观点/演示者/模型三元组,即:
订单表单和客户表单=行为和逻辑是相同的,但数据绑定的数据源不同,表单标题也是如此。数据源是我所有模型的公共属性所以这不是问题,设置表单标题,我不得不在我的演示者InitView
方法中对其进行硬编码
一切都很好,但我的情况是我有几个非常相似的简单mvp三元组。我想重构它,但在这种情况下,我将不得不将一些参数传递给mvp构造函数。
到目前为止,我这样做:
事实上,我正面临一个选择:
你能给我一些提示/建议吗?
(对不起,如果我不是很清楚)
答案 0 :(得分:1)
弗雷德,
我会选择1& 2以一种具有抽象视图/演示者的方式,该视图/演示者包含通用行为并创建抽象函数,这些函数可能是子类实现的特定行为。
例如,
public abstract class AbstractPresenter{
// subclass will be implemented
public abstract void InitView(Model model, View view);
}
然后你可能有了sublcasses,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
}
}
如果方向错误,请纠正我。 我希望它有所帮助。
虎
答案 1 :(得分:1)
我只在需要时创建一个带参数和子类的通用视图/演示者。
答案 2 :(得分:1)
另一种方法(以及我曾经解决过这个问题以便它运行得很好的方法)是在模型中构建一个通用的“元数据”接口,然后视图(接口或通过类继承)使用这些通用演示者中的界面。我选择为我的模型使用继承,并为我的视图使用接口(更容易在现有表单上打一个接口,而不是需要整个板上的表单/帧继承)。在我的解决方案中,演示者的构造函数采用了3个参数,模型,视图和“MVP名称”。我使用MVP的名称来加载特定于当前场景的设置。