2010-07-01 71 views
1

我目前正在設計一個新的.NET應用程序,並希望保持UI獨立。多用戶界面的界面控制器(ViewModel)

雖然我起初想使用WPF,但我希望可以選擇在必要時將UI交換到ASP或WinForms。

在分層設計:

視圖 - 接口控制器(視圖模型) - 模型 - 持久性

是可以設計的接口控制器,使其與不同的視圖技術工作,或者將我需要的在View的同時替換接口控制器?

回答

2

看看我的answer的問題"Silverlight with MVVM Inheritance: ModelView and View matching the Model"

我給出的答案也適用於您的情況。

概括地說,我定義了以下常規接口:

public interface IModel 
{ 
} 

public interface IViewModel 
{ 
} 

public interface IViewModel<M> : IViewModel 
    where M : IModel 
{ 
    void Bind(M model); 
} 

public interface IView 
{ 
} 

public interface IView<VM> : IView 
    where VM : IViewModel 
{ 
    void Bind(VM viewModel); 
} 

這讓我定義特定的接口是這樣的:

public interface IPersonModel : IModel 
{ 
} 

public interface IPersonViewModel : IViewModel<IPersonModel> 
{ 
} 

public interface IPersonView : IView<IPersonViewModel> 
{ 
} 

通過對這些接口可以互換實現圖層您IView<VM>與WPF,Silverlight,Windows Forms甚至ASP.Net的接口的實現。

+0

我喜歡你的接口,但我會認爲重用界面和模型之外的所有東西都是有限的(也就是說,你需要不同的實現方式)您希望支持的每種技術的視圖和虛擬機)。如果你實際上在多種技術中使用它們,並且有不同的觀點,我們很樂意聽到。乾杯 – Berryl 2010-07-02 05:03:31

+0

@Berryl - 我的確在不同的UI技術中使用它們。 VM獨立於UI技術,因此您只需重新實現視圖界面,​​而不是視圖模型界面。 – Enigmativity 2010-07-02 06:51:01

0

只要你

1)是不是很想把代碼隱藏在XAML標記

2),並限制所有的相關功能,以您的視圖模型來決定

然後是的,你應該可以將其與任何視圖技術交換出來。

當您將其交換出來時,雖然您顯然必須重新設置新UI與視圖模型的交互方式。 WPF用於連接視圖模型的主要接口是INotifyPropertyChanged,INotifyCollectionChanged和ICommand。所以你的新UI基本上必須利用這些接口才能獲得相同的功能