2009-07-13 70 views
2

我正在试验用Delphi 2009实现轻量级mvp框架。MVP:其他构造函数的参数比视图和模型?

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

我面临的dilemna: 我有几个非常相似的看法/主持人/模型黑社会,即:

订单和客户的形式=行为和逻辑是相同的,但对于数据绑定的数据源是不同的形式标题也是如此。数据源是我的所有模型的共同属性,所以它不是一个问题,设置表格标题,我被迫在我的主持人硬编码它InitView方法

所有工作很好,但我在一个我有几个简单的mvp黑社会非常相似的情况。我想重构它,但在这种情况下,我将不得不将一些参数传递给mvp构造函数。

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

  1. 创建视图
  2. 创建模型
  3. 创建演示并在构造

事实上注入模型和视图,我正面临着一个选择:

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

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

(抱歉,如果我不是很清楚)

回答

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 
    } 
} 

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

+0

老虎,谢谢你的回答。你的解决方案似乎是我的第二个。我同意这是一种干净的方式,但是为了设置表单标题或表单上的标签而创建几个子类,与我现在看到的有点矫枉过正。谢谢你的帮助。 – Fred 2009-07-14 00:09:02

1

我创建的参数和仅在需要时子类的通用视图/主持人。

1

另一种方法(以及我曾经解决这个问题的方式,因此它的工作非常好)是在模型中构建一个通用的“元数据”接口,然后视图(接口或通过类继承)使用这些演示者中的通用接口。我选择对我的模型使用继承,并为我的视图使用接口(在现有的表单上使用slapping接口比在整个电路板上要求表单/框架继承性更好)。在我的解决方案中,演示者的构造函数带有3个参数,模型,视图和“MVP名称”。我使用MVP的名称来加载特定于当前场景的设置。