Я в настоящее время разрабатываю новое приложение.NET и хотел бы сохранить его UI независимый.
Пока я initally хотел бы использовать WPF, я хотел бы иметь опцию свопинга UI к ASP или WinForms при необходимости.
В многоуровневой структуре:
Представление - контроллер интерфейса (ViewModel) - модель - постоянство
действительно ли возможно разработать Контроллер интерфейса так, чтобы это работало с технологиями другого представления, или я должен буду заменить контроллер интерфейса в то же время, что и Представление?
Взгляните на мой ответ на вопрос «Silverlight с наследованием MVVM: ModelView и View, соответствующие модели» .
Ответ, который я дал, работает и в вашей ситуации.
Вкратце, я определяю следующие общие интерфейсы:
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
интерфейс с WPF, Silverlight, Windows Forms или даже ASP.Net.
При условии, что вы
1) У вас нет соблазна поместить код программной части в вашу разметку xaml
2) и ограничить все соответствующие функции, которые будут продиктованы вашей моделью просмотра
, тогда да, вы сможете заменить его любой технологией просмотра.
Когда вы меняете его местами, вам, очевидно, придется изменить способ взаимодействия нового пользовательского интерфейса с моделью просмотра. Основными интерфейсами, которые WPF использует для подключения к модели представления, являются INotifyPropertyChanged, INotifyCollectionChanged и ICommand. Таким образом, ваш новый пользовательский интерфейс должен будет подключаться к этим интерфейсам, чтобы получить ту же функциональность