2009-07-13 71 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的名稱來加載特定於當前場景的設置。