Windows Forms - это старая технология? - PullRequest
26 голосов
/ 16 декабря 2009

Настало время написать GUI для моего проекта, и мне интересно, какую технологию использовать. Я делал большую часть своей разработки .NET GUI в .NET 1 & 2, поэтому я достаточно хорошо знаю Windows Forms . Я смутно осведомлен о WPF , но еще не пытался "попасть в него".

Windows Forms мертвы или умирают? Является ли WPF хорошей технологией для изучения? Это будущее, просто фаза или технология, которая может идти рука об руку с Windows Forms?

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

Ответы [ 11 ]

45 голосов
/ 16 декабря 2009

WinForms мертвы или умирают?

Нет. Он не получил существенного развития (т. Е. Нет новых основных дополнений), но он полностью поддерживается, например, в .NET 4.

Является ли WPF хорошей технологией для изучения?

Да.

Это будущее, просто фаза или технология, которая может идти рука об руку вместе с WinForms?

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

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

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

В качестве конкретного примера рассмотрим, как WPF Button является контейнером, который может содержать произвольный контент - не просто изображение + текст, как в WinForms, но абсолютно любой другой элемент управления WPF или набор элементов управления.

В WPF гораздо проще писать динамические макеты по сравнению с WinForms. У последних тоже есть макеты, но проблема в том, что они являются королевским PITA для работы в визуальном конструкторе, и написание инициализации компонента WinForms с помощью кода очень утомительно. С WPF вы просто пишете разметку XAML вручную, и макеты (и деревья управления в целом) очень естественно представлены в XML.

Частично исходя из вышесказанного, я считаю, что WPF легче локализовать. Во-первых, это потому, что вам действительно нужны динамические макеты для локализуемости (поскольку вы не знаете заранее длину строк во всех локалях). Решение WinForms для этого состоит в том, чтобы рассматривать не только текстовые метки, но также контролировать положение и размер как «локализуемое свойство» - поэтому переводчик должен сам переставлять элементы управления в форме, если он обнаружит, что строки не подходят. В WPF динамический макет является подходом по умолчанию, поэтому локализатор работает только со строками.

Платформа связывания WPF довольно мощная (даже если многословная, из-за отсутствия встроенных преобразователей), и сильно продвигает MVP и, в общем, разделение модели / вида. Этого можно добиться с помощью WinForms в 2.0+, и я тоже пытаюсь это сделать, но это более утомительно, особенно в отношении обработки нуля, и иногда может быть довольно глючным .

Одной из особых проблем является то, как дизайнер WinForms взаимодействует с системой контроля версий. Здесь есть две похожие проблемы. Прежде всего, дизайнер сериализует отредактированную форму как код, и иногда очень незначительные изменения в макете могут заставить дизайнера генерировать совершенно другой код (это особенно заметно, если вы редактируете панели инструментов), потому что он перетасовывает строки кода вокруг - т.е. в действительности он изменил единственное значение свойства в одной строке, но оно также переупорядочивает все. Это приводит к очень большому шуму в истории (почти невозможно сказать, что именно было изменено при просмотре различий), но, что более важно, это означает, что объединение таких файлов является большой головной болью. Обычно это происходит, когда два человека работают с одной и той же формой одновременно, и затем один фиксирует свои изменения, а другой пытается зафиксировать, обнаруживает, что файл был изменен в то же время, пытается объединиться, видит различия, и выпрыгивает из ближайшего окна.

Очень похожая проблема возникает при использовании локализуемых форм WinForms, которые помещают некоторые свойства в файл ресурсов. Опять же, разработчик очень любит переупорядочивать значения свойств в файле ресурсов для любого тривиального изменения со всеми теми же проблемами, как описано ранее.

Теперь о недостатках в WPF. Главное, что это немного сложнее и может показаться незнакомым человеку, имеющему опыт работы только с WinForms, VCL, VB или другими подобными «традиционными» средами. Другая проблема заключается в том, что документация, на мой взгляд, не идеальна - она ​​обычно дает хороший обзор, но редко охватывает угловые случаи, некоторые из которых могут быть довольно важными. Это относится и к WinForms, но там меньше возможных комбинаций, поэтому меньше угловых случаев.

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

Одной из моих любимых мозолей в WPF является способ сглаживания текста, который воспринимается большинством людей гораздо хуже, чем обычный Windows ClearType, особенно для шрифтов небольшого размера; см. этот отчет об ошибках для получения дополнительной информации. Это исправлено в WPF 4, но оно еще не выпущено, и даже когда это произойдет, есть вероятность, что вам захочется какое-то время пользоваться проверенным и верным 3.5 SP1; и исправление не перенесено.

11 голосов
/ 16 декабря 2009

WinForms не мертвы и не умирают ... они просто не могут обеспечить такой же пользовательский интерфейс, как WPF (без МНОГО работы). Это просто старая технология.

WPF - хорошая технология для изучения. Это дает возможность предоставлять гораздо более богатый пользовательский опыт с меньшим количеством работы.

Модель для работы с WPF определенно отличается от WinForms. Я использовал оба (WinForms в большей степени, чем WPF / Silverlight), и самые сложные переходы для меня были:

  1. XAML, что не так плохо, если у вас есть опыт работы с другим языком разметки, например MXML.

  2. DataBinding

  3. Обработка событий интерфейса (эффекты MouseOver, временные шкалы и т. Д.)

4 голосов
/ 16 декабря 2009

WinForms далека от смерти / смерти. WPF - это просто новый способ решения пользовательского интерфейса, поскольку он продвигает вещи, которые были более сложными в WinForms. Такие вещи, как отделение модели, стоящей за пользовательским интерфейсом, от фактического пользовательского интерфейса, чтобы ее можно было легко протестировать, имеют большое значение.

Это определенно стоит изучить, но обязательно изучите «способ WPF» создания экранов, а не просто вписывайте в него свой путь WinForms. Это другой способ кодирования.

3 голосов
/ 08 июня 2016

Перспектива с 2016 года:

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

Да, семь лет спустя, WinForms все еще живы в корпоративных средах и все еще поддерживаются Microsoft. Google Trends показывает медленное, устойчивое снижение интереса с середины 2005 года, при этом текущий интерес составляет около трети 2005 года.

WPF произвела сенсацию в 2009 году, но так и не стала полностью стандартом де-факто для разработки новых пользовательских интерфейсов. Google Trends показывает, что интерес к WPF достиг своего пика в 2009-2011 годах, а затем уменьшился быстрее, чем в WinForms. Текущий поисковый интерес составляет около половины 2011 года, но все еще почти удваивает текущий поисковый интерес WinForms.

Так что разработчики сейчас используют? Популярность веб-интерфейсов возросла, в основном из-за роста количества просмотров на мобильных устройствах. Вы могли бы поспорить о том, как лучше всего написать веб-интерфейс (AngularJS + WebAPI, ASP.NET MVC, React - все в тренде Google Trends). Какую бы технологию вы ни использовали, трудно отрицать привлекательность написания (отзывчивого) пользовательского интерфейса и его применения практически на всех устройствах и платформах. Услуги облачного хостинга способствовали расширению доступа в Интернет, предлагая практически мгновенное / бесконечное масштабирование с минимальными первоначальными инвестициями в инфраструктуру.

Поэтому сегодня я от всей души рекомендую перейти к веб-интерфейсу, поскольку это может увеличить срок годности вашего приложения, которое часто должно длиться очень долго в корпоративных средах. С другой стороны, если вы разработчик на базе Microsoft и занимаетесь разработкой мобильных приложений, Xamarin стоит посмотреть.

2 голосов
/ 16 декабря 2009

WinForms, вероятно, еще долго будут присутствовать в корпоративных средах. Они работают достаточно хорошо для многих целей. Многие проекты основаны на WinForms, и многие компании будут придерживаться этой технологии на протяжении проектов, а не смешивать и сочетать их.

Сказав это, WPF - это будущее. Это гораздо более эффективная, гораздо более эффективная технология пользовательского интерфейса, которую стоит изучить.

WinForms и WPF могут сосуществовать в одном приложении. Вероятно, это будет наиболее распространенный способ представить их компании (это и небольшие проекты с проверкой концепции).

1 голос
/ 20 декабря 2009

мы начинаем использовать wpf в нашем новом проекте

новое приложение содержит много устаревшего кода в winforms.

всякий раз, когда мы хотим использовать старый диалог winforms, это возможно.

когда вы пользуетесь WPF, вы не хотите возвращаться к winforms. гораздо проще делать вещи с графическим интерфейсом, которые отнимают у вас много времени в winforms.

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

опыт работы с сомони, который может помочь с первой архитектурой, может быть очень полезным.

1 голос
/ 18 декабря 2009

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

Хотя одно слово совета. Даже несмотря на то, что вы можете сделать намного более сложный макет с WPF (как упомянуто, кнопка или почти все, что угодно, может содержать другие вещи, такие как изображение, текстовое поле и даже больше), некоторые другие «базовые» вещи, найденные в WinForm, трудно воспроизвести , Пример: до выхода инструментария WPF у WPF не было сеток данных и средства выбора даты и времени, поэтому вам пришлось сделать это самостоятельно. Кроме того, он по-прежнему не имеет MaskTextBox, вы должны сделать это самостоятельно или загрузить его от третьих лиц. Последнее, с чем я столкнулся, на самом деле я нахожу аннотацию с Treeview: линии между листьями и родителями не отображаются.

Это, как говорится, все еще намного лучше, чем WinForm в большинстве аспектов.

1 голос
/ 18 декабря 2009

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

Кроме того, хотя написание xaml-разметки очень отличается от создания форм, оно не находится в миллионе миль от написания html и, вероятно, не станет для вас слишком большим уходом, если вы занялись веб-разработкой. *

Хотя WinForms - это старая технология, которая не означает, что она когда-либо исчезнет, ​​у нас все еще есть приложения, в которых я работаю, написанные на VB6. Только половина нашего отдела разработки работает с .NET - мы разделены на 3 команды, одна команда все еще использует .NET 1.1, другая команда использует .NET 2, а команда, в которой я работаю, использует .NET 3.5 (вы могли бы скажем, мы счастливчики!)

1 голос
/ 16 декабря 2009

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

Однако принятие решения между WPF и WinForms - это отдельная история. Конечно, WPF - это новая горячность, а WinForms устарел, но действительно ли это правильный выбор? Очевидно, «это зависит» от ситуации, и Microsoft продолжает поставлять и поддерживать WinForms, поэтому в ближайшее время она не исчезнет. Итак, каковы убедительные факторы, чтобы выбрать WPF вместо WinForms? Карл намекает на выбор WPF вместо WinForms в своей серии бизнес-приложений WPF, но причины для некоторых могут быть тонкими.

Я лично предпочитаю WPF, потому что я начинал как веб-разработчик и считаю, что разметка XAML более естественная.

1 голос
/ 16 декабря 2009

WinForms не умер. Google "winforms C # jobs", и вы найдете много. WPF - популярная вещь, но она все еще относительно новая. ИМХО еще два-три года не будет массовым.

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