Зависимости в MVVM - PullRequest
       11

Зависимости в MVVM

0 голосов
/ 07 августа 2009

Я только начинаю копаться в шаблоне MVVM для WPF, но, поскольку я не профессиональный разработчик, я иногда чувствую себя немного растерянным.

Основная проблема, с которой я столкнулся, - это решить, кто кого должен создавать: допустим, у меня есть база данных, в которой хранятся собаки и кошки. Я бы тогда имел DatabaseManager, который связывается с базой данных (Unit of Work !?), DogRepository / CatRepository и объектами Dogs / Cats.

С другой стороны у меня есть главное окно, с помощью которого пользователь может открывать / закрывать базу данных, и которое содержит список для кошек и один для собак, поэтому мне нужны MainWindowViewModel, CatsViewModel и DogsViewModel.

Но как мне создать эти объекты? В моем приложении я создаю MainWindow, очевидно. А потом? Создать MainWindowViewModel и передать его в MainWindow или MainWindow создает свой собственный MainWindowViewModel? Как создается DatabaseManager? По MainWindowViewModel?

А как насчет CatsViewModel и соответствующего CatRepository? Создает ли MainWindowViewModel CatsViewModel, который, в свою очередь, создает CatRepository? Я действительно запутался.

Ответы [ 2 ]

1 голос
/ 07 августа 2009

Вы запутались, потому что все эти опции действительны. Если вы не используете внедрение зависимостей и ViewModels имеют всю необходимую им информацию самостоятельно, нет никаких причин, чтобы не создавать представление для создания модели представления (обычно это делается путем ее создания через StaticResource для View:

<Window.Resources>
     <local:CatViewModel x:Key="catVM" />
</Window.Resources>
<Grid DataContext="{StaticResource catVM}">
...
</Grid>

Если вы используете инъекцию зависимостей, все равно совершенно правильно объявить вашу виртуальную машину как зависимость вашего представления в ее конструкторе:

public CatView(CatViewModel vm) : this()
{
     this.DataContext = vm;
}

Последний вариант - это концепция третьей стороны, которая создает как представление, так и модель представления (однако это уместно) и объединяет их извне. Обычно это называется предъявитель .

В любом случае, все это допустимые параметры. Вы должны выбрать тот, который наиболее подходит для вас. Я уверен, что кто-то придет и потребует богохульства, но это действительно соответствует вашим потребностям и вашему проекту.

0 голосов
/ 29 августа 2009

Шаблон View-Model-ViewModel (MVVM) не определяет, кто отвечает за создание различных классов. Поэтому в сообществе MVVM вы найдете много разных подходов.

Мне нравится использовать Application Controller или контроллеры сценариев использования, которые управляют рабочим процессом приложения и поэтому отвечают за создание классов ViewModel и Repository.

Конкретный пример того, как это работает, показан в примере проекта ViewModel:

WPF Application Framework (WAF)

http://waf.codeplex.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...