2010-07-01 41 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基本上必须利用这些接口才能获得相同的功能