我有一個大組件。我們也可以認爲它是主要組成部分。這個組件應該包含一個子組件,它在我的情況下是一個抽象面板,並且它已經實現了自己的MVP。現在我正在實現MainComponent,因此我需要產生小型可重用抽象子組件的MVP。MVP產卵MVP子組件
我現在的問題是: 我應該在哪裏產生3個子部件中的每一個? 在模型中查看和演示者+模型? 在視圖中查看,主持人,主持人,模型中的模型?
在此先感謝您的意見!
我有一個大組件。我們也可以認爲它是主要組成部分。這個組件應該包含一個子組件,它在我的情況下是一個抽象面板,並且它已經實現了自己的MVP。現在我正在實現MainComponent,因此我需要產生小型可重用抽象子組件的MVP。MVP產卵MVP子組件
我現在的問題是: 我應該在哪裏產生3個子部件中的每一個? 在模型中查看和演示者+模型? 在視圖中查看,主持人,主持人,模型中的模型?
在此先感謝您的意見!
你不上你的具體的實施MVP的提供太多細節,但這裏是我關於這個問題的看法:
它有自己的MVP已經實施
我假設這意味着當視圖加載時(無論是主視圖還是子視圖),它已經與正確的演示者和模型連接起來了。我還假設,如果任何子演示者與主要演示者共享組件或服務,則這些由演進依賴注入框架解決。
如果我的假設是不正確的,那麼負責加載你的視圖的組件應該被更新以確保發生這種情況,即當視圖被加載時它是有效的。
我現在的問題是:我應該在哪裏產生3個子部件中的每一個?在模型中查看 和主持人+模型?在視圖中,主持人 演示者,模型中的模型?
根據我上面的評論,您應該有一個負責加載視圖並確保它們被正確配置的對象(讓我們稱這個對象爲ViewLoader
)。這個對象只能從你的視圖層直接調用,即從來沒有從演示者調用。
雖然這個問題是演示者對象驅動應用程序,所以需要一種告訴視圖層加載另一個視圖的方式。您可以通過將視圖參考傳遞給演示者來解決此問題。認爲應該參考的是不暴露有關所使用的視圖技術的任何細節,例如一個接口來隱藏:然後
public interface IMainView
{
void OpenSettings();
}
主講人可以調用OpenSettings()
方法。該方法將通過一個具體的視圖類來實現,可能是這樣的:
public class MainView : UserControl, IMainView
{
public void OpenSettings()
{
var settingsView = viewLoader.Load(typeof(settingsView));
this.tabControl.add(settingsView);
}
}
注意,實現該接口可以使用的ViewLoader
加載視圖,以便它只有與插入到關注自身的實際具體視圖查看視圖層次結構(因爲ViewLoader
提供了完全配置的視圖)。
還要注意IMainView
接口描述了應用程序的行爲而不是實際的實現(即它被命名爲OpenSettings
而不是OpenDialog
)。這意味着如果視圖改變它打開設置視圖的方式(例如在對話框中顯示它),那麼只需要更新視圖;演示者不需要進行任何更改,因爲它仍會調用OpenSettings()
方法來調用所需的行爲。
總結:
「我有一個大組件。」 - 那是因爲你的名字是雷神! –