Создание приложения с использованием WPF, MVVM и Prism - PullRequest
4 голосов
/ 16 января 2012

Мы в нашей команде, изучаем возможность использования WPF с Prism.

Наше текущее решение было построено с использованием Windows Forms, поэтому существует множество факторов, которые необходимо учитывать и изучать, прежде чем удовлетворительно достичь целей этой миграции архитектуры.

Шаблон MVVM является одной из технологий, которые входят в число новых функций, связанных с этими факторами. В этом паттерне используется совершенно другая концепция, чем та, которую в настоящее время знает наша команда.

Мы много читаем и узнаем об этом, и мы не можем определить, будет ли его использование (чисто) действительно продуктивным для наших целей: мы создадим приложение, которое будет иметь очень большое количество окон, которые будут используйте модель CRUD (создание, чтение, обновление и удаление). Например: регистрация клиентов, регистрация продуктов, в том числе. Мы считаем, что использование этого шаблона может привести к переработке во время определений моделей, которые должны быть переписаны во время определений ViewModels.

Интересно, есть ли у кого-нибудь какие-либо отчеты или советы по поводу использования этих технологий?

1 Ответ

12 голосов
/ 16 января 2012

Если вы работаете с WPF, обязательно используйте шаблон проектирования MVVM. Это значительно упрощает жизнь и облегчает дальнейшее обслуживание.

По поводу вашего комментария

Мы думаем, что использование этого паттерна может привести к переделке моделей. определения, которые должны быть переписаны во время ViewModels определения.

Существует два способа работы с моделями / моделями представления в MVVM. Подход "MVVM-purist" состоит в том, чтобы выставить свойства вашей Модели из ViewModel, и в этом случае вы бы дублировали некоторый код. Более практичный подход состоит в том, чтобы представить всю Модель из ViewModel. Оба способа приемлемы, хотя я бы рекомендовал использовать второй, если у вас нет очень большого проекта с отдельными людьми / командами, работающими над слоями Model и ViewModel.

MVVM Purist:

public class CustomerViewModel
{
    private Customer _customer;

    public string Name 
    {
        get
        {
            return _customer.Name;
        }
        set
        {
            if (value != _customer.Name)
            {
                _customer.Name = value;
                RaisePropertyChanged("Name");
            }
        }
    }
}

<TextBlock Text="{Binding Name}" />

Более практичный подход:

public class CustomerViewModel
{
    private Customer _customer;

    public Customer Customer
    {
        get
        {
            return _customer;
        }
        set
        {
            if (value != _customer)
            {
                _customer= value;
                RaisePropertyChanged("Customer");
            }
        }
    }
}

<TextBlock Text="{Binding Customer.Name}" />

Что касается Prism, я думаю, что это отличная библиотека. Я предпочитаю их NotificationObject и EventAggregator своим, и как DelegateCommand, как только я привык к тому факту, что он автоматически не увеличивает его CanExecuteChanged при изменении параметра CanExecute.

Единственное, что в Prism мне не очень нравится, это их RegionManager. Я чувствую, что это позволяет View контролировать поток приложений, а не ViewModels. Я также вижу, что его часто неправильно используют для навигации, и довольно часто он превращается в беспорядок. Я все еще использую его для определения макета моего приложения (например, MenuRegion, NavigationRegion, ContentRegion), однако помимо этого я использую свою ViewModel для всех навигационных нужд.

Так что, в конце концов, я бы сказал, пойти на это! Мне нравится работать с WPF, и я чувствую, что вы не должны использовать WPF без шаблона проектирования MVVM. Prism также является отличной библиотекой, предоставляющей некоторые недостающие функциональные возможности, которые, по моему мнению, необходимы в каждом приложении MVVM.

...