2009-10-19 2 views
4

Я разрабатываю приложение большого числа в WPF/WCF/NHibernate/etc. и реализовали шаблон MVP (хотя этот вопрос по-прежнему имеет отношение к MVC) в качестве основной архитектуры.WPF C# MVC/MVP шаблон и код управления пользователя

Совершенно естественно расширять и добавлять функциональные возможности, а также возвращаться и вносить изменения в определенные биты и фрагменты в отношении архитектуры ядра (контроллеры, представления и т. Д.).

Но порой код-позади нестандартных пользовательских элементов управления, которые я создаю, чувствует, как будто он «ломает» реализованную парадигму MVC/MVP, в этом коде относится утечка в дизайне и дизайне, связанная с утечкой в ​​коде. Позвольте мне еще раз пояснить, что это только для пользовательских элементов управления. Мое личное мнение, что эта модель для кода (как для ASP.NET, так и для WPF) - это «Bad Thing», но, независимо от моего мнения, я придерживаюсь этого.

Каковы ваши рекомендации по передовым методам в таком сценарии? Как вы справляетесь с такими проблемами? Вы, например, работаете вокруг кода-за-отсутствия пользовательских элементов управления, и если да, то как?

ответ

1

Поскольку вы используете WPF, вы должны действительно изучить шаблон MVVM (Model-View-ViewModel). Это форма шаблона Presentation Model (PM), обсуждаемая Martin Fowler. WPF очень ориентирован на привязку и обеспечивает очень мощную и богатую структуру привязки данных для XAML. Используя MVVM, вы можете полностью и полностью отделить свои ViewModels от своих представлений, что позволяет по-настоящему разрабатывать интерфейс POCO, который обеспечивает максимальную степень разделения проблем и способности тестировать единицы.

С MVVM вы сможете модулизовать и развязать все ваши взгляды, включая Windows, UserControls и т. Д., Из кода, который их управляет. У вас не должно быть логики в Code Behind, кроме того, что автоматически генерируется для вас. Сначала некоторые вещи немного сложны, но вам нужно начать следующие ссылки.Основные вещи, чтобы узнать это сам шаблон MVVM, Связывание данных, перенаправленные события и команды, и Прикрепленные Поведения:

WPF + MVVM имеет немного кривой обучения впереди, но как только вы получите в течение начального плетень, вы никогда, никогда не хотят, чтобы оглянуться назад. Сложность, потеря связи, привязка данных и сырая мощность WPF и MVVM поразительны. У вас будет больше свободы с вашим интерфейсом, чем когда-либо раньше, и вы редко будете, если вообще когда-либо, на самом деле беспокоиться о коде.

+0

Спасибо за эти ссылки! –

0

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

Думайте об этом таким образом. Если вы проигнорировали MVP, пользовательский элемент управления будет взаимодействовать с моделью определенным образом. то, что вы делаете с MVP, берет этот путь и определяет их с помощью интерфейса View. Да, вы добавляете дополнительный уровень вызова, но преимущество в том, что вы тщательно документируете, как он взаимодействует с остальной системой. Кроме того, вы получаете преимущество, заключающееся в том, что вы можете его разорвать и заменить чем-то совершенно другим. Поскольку все новое нужно сделать, это реализовать интерфейс интерфейса.

Если у вас есть конкретный пример, я могу лучше проиллюстрировать его.

1

Мне, похоже, нравятся кодовое отставание (еще одно личное мнение), но они работают только до тех пор, пока они ничего не делают, кроме как облегчают взаимодействие между событиями управления и остальной частью приложения. Я признаю, что я видел множество контр-примеров. Я даже написал несколько из них.

Действительно, все, что нужно сделать с кодом, это «о, кто-то нажал эту кнопку, возможно, что-то, что хочет знать об этом». PRISM (из шаблонов и практик MS) предоставляет много архитектурной инфраструктуры для WPF и Silverlight; который включает в себя интерфейс публикации/подписки, который позволяет элементам управления и позади кода просто публиковать событие, даже не подозревая о возможных подписчиках, или о том, что подписчики могут делать с этим событием. PRISM также добавляет команды для Silverlight.

Общим вариантом MVC для WPF и Silverlight является MVVM (Model, View, ViewModel). ViewModel делает данные доступными для пользовательских элементов управления в той или иной форме, которая является наиболее полезной (например, ObservableCollections, для облегчения двусторонней привязки).

Смежные вопросы