我目前正在設計一個新的.NET應用程序,並希望保持UI獨立。多用戶界面的界面控制器(ViewModel)
雖然我起初想使用WPF,但我希望可以選擇在必要時將UI交換到ASP或WinForms。
在分層設計:
視圖 - 接口控制器(視圖模型) - 模型 - 持久性
是可以設計的接口控制器,使其與不同的視圖技術工作,或者將我需要的在View的同時替換接口控制器?
我目前正在設計一個新的.NET應用程序,並希望保持UI獨立。多用戶界面的界面控制器(ViewModel)
雖然我起初想使用WPF,但我希望可以選擇在必要時將UI交換到ASP或WinForms。
在分層設計:
視圖 - 接口控制器(視圖模型) - 模型 - 持久性
是可以設計的接口控制器,使其與不同的視圖技術工作,或者將我需要的在View的同時替換接口控制器?
看看我的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的接口的實現。
只要你
1)是不是很想把代碼隱藏在XAML標記
2),並限制所有的相關功能,以您的視圖模型來決定
然後是的,你應該可以將其與任何視圖技術交換出來。
當您將其交換出來時,雖然您顯然必須重新設置新UI與視圖模型的交互方式。 WPF用於連接視圖模型的主要接口是INotifyPropertyChanged,INotifyCollectionChanged和ICommand。所以你的新UI基本上必須利用這些接口才能獲得相同的功能
我喜歡你的接口,但我會認爲重用界面和模型之外的所有東西都是有限的(也就是說,你需要不同的實現方式)您希望支持的每種技術的視圖和虛擬機)。如果你實際上在多種技術中使用它們,並且有不同的觀點,我們很樂意聽到。乾杯 – Berryl 2010-07-02 05:03:31
@Berryl - 我的確在不同的UI技術中使用它們。 VM獨立於UI技術,因此您只需重新實現視圖界面,而不是視圖模型界面。 – Enigmativity 2010-07-02 06:51:01