Является ли «неинтрузивный код позади» хорошей или плохой практикой? - PullRequest
4 голосов
/ 19 февраля 2009

Я немного удивлен, что при изучении WPF / XAML / Silverlight почти все примеры XAML / C #, с которыми я столкнулся, имеют события "Click" в XAML и очень мало в конструкторе Window или Page.

С учетом того, что сегодня акцент делается на "неинтрузивном Javascript", я бы подумал, что на самом деле все больше разработчиков будут структурировать свой XAML / code-behind следующим образом:

XAML:

<Grid>
    <Button x:Name="btnEdit"/>
</Grid>

Код:

public Window1()
{
    InitializeComponent();

    btnEdit.Content = "Edit";
    btnEdit.Click += new RoutedEventHandler(btnEdit_Click);
}

private void btnEdit_Click(object sender, RoutedEventArgs e)
{
    btnEdit.Content = "This button was clicked.";
}

Есть мысли о том, почему это будет хорошей или плохой практикой?

Ответы [ 4 ]

6 голосов
/ 19 февраля 2009

Большинство небольших примеров WPF дают только представление о том, что возможно , не сосредотачиваясь на вопросах дизайна или хорошего стиля.

В реальных приложениях XAML следует использовать только для декларативного программирования. Например, привязка команды к кнопке или объявление привязки данных. У Карла Шиффлетта есть несколько замечательных статей о шаблоне MVVM , который очень хорошо разделяет проблемы вашего приложения WPF / Silverlight.

Код позади, на мой взгляд, просто подходит для крошечных приложений. Это имеет тенденцию смешивать вид, контроль и данные.

1 голос
/ 19 февраля 2009

Если я правильно помню, я думаю, что есть частичный класс, который реализует код Init выше, который является кодом, созданным Visual Studio. Я не могу говорить за WPF, но он делает это в ASP.Net 2.0, поэтому я предполагаю, что он делает то же самое здесь. Мне понадобилось навсегда, чтобы привыкнуть к этому.

Я согласен. Я ненавижу определять события в разметке.

0 голосов
/ 08 сентября 2011

MVVM - плохая практика. Вы думаете, что разделяете данные и представление. И что? Общий механизм с XAML-связыванием, связыванием команд, переводом его в методы и реализацией INotifyPropertyChanged для чего? Для UTests (я сделал - я тестирую концепцию хе-хе)? Правильное программное обеспечение нужно только в тесте пользователя ... Это ваш код, разделенный таким образом, что вы иногда не понимаете, где что.

Для чего вы используете INotify? Для чего все элементы управления Microsoft ALL WPF и сущности в WPF написаны унаследованными от FrameworkElement с волшебными DependencyProperties?

Множественное связывание - это техника жесткого ресурса словом (читайте авторов MVVM).

Я написал сложную 3D CAE-систему без паттернов меньше года ... с классической организацией приложения с помощью классов и кода. https://skydrive.live.com/?cid=ea6ad1087e3103f0&sc=photos&id=EA6AD1087E3103F0!103&sff=1#cid=EA6AD1087E3103F0&id=EA6AD1087E3103F0!118&sc=photos

Все образцы в MVVM о клиентах в компании ... Предлагаю поставить название MVVMCC pattern (Заказчик в компании)

0 голосов
/ 23 июня 2009

Я согласен с вашей заботой.

После долгих споров мы придерживаемся аналогичной схемы ненавязчивых, сверхлегких команд XAML и связывания и данных в выделенном коде.

Если вы добавляете события в XAML, в коде события появляется навигация по контекстному меню. Если вы связываете команды в XAML, аналога нет. Вы можете перемещаться из объявления команды в XAML, но не там, где оно назначено свойству Command в элементе управления.

...