WPF против WinForms - взгляд программиста на Delphi?


38

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

Я многолетний программист на Delphi, который, наконец, делает прыжок на C #. Мои коллеги-программисты на Delphi поймут, что мне очень приятно узнать, что Андерс Хейлсберг, известный в Delphi, был архитектором C #. У меня сильная зависимость от пользовательских компонентов VCL Delphi, особенно тех, которые участвуют в создании многошаговых мастеров и компонентов, которые действуют как контейнер для дочерних компонентов.

Исходя из этого, я надеюсь, что те из вас, кто перешел с Delphi на C #, могут помочь мне с решением WinForms vs. WPF для написания моих первоначальных приложений. Обратите внимание, я очень нетерпелив, когда кодирование и такие вещи, как полноценное автоматическое заполнение и правильная поддержка отладчика, могут создать или разрушить проект для меня, включая возможность находить легкодоступную информацию о функциях и вызовах API и, тем более, обходные пути для ошибок. ,

Потоки SO и комментарии в начале 2009 года вызывают у меня большую озабоченность по поводу WPF, когда дело доходит до потенциальных разочарований, которые могут испортить мой код разработки на C # UI. С другой стороны, тратить слишком много времени на изучение технологии API, которая, даже если она не будет заброшена, скоро будет заменена (WinForms), также вызывает беспокойство, и я действительно нахожу поддержку GPU в WPF.

Отсюда и моя двойственность. Так как я еще не изучил ни одну технологию, у меня есть редкая возможность начать все сначала, и мне не нужно сталкиваться с большой кривой «отученности», которую я видел, как люди упоминали в различных потоках, когда программист WinForms переходит на WPF. С другой стороны, если использование WPF будет слишком неприятным или будет иметь другие серьезные негативные последствия для нетерпеливого разработчика RAD, такого как я, я просто буду придерживаться WinForms, пока WPF не достигнет того же уровня поддержки и простоты использования. Чтобы дать вам конкретный пример моей психологии как программиста, я использовал VB и впоследствии Delphi, чтобы полностью избежать реальной боли в кодировании с помощью MFC, библиотеки пользовательского интерфейса Windows, с которой многие разработчики столкнулись при разработке ранних приложений для Windows. Я никогда не сожалел о своей удаче избежать MFC.

Также было бы приятно узнать, приложил ли Андерс Хейлсберг руку к архитектуре WPF и / или WinForms и есть ли какие-либо различия в креативном видении и простоте использования, воплощенных в любой кодовой базе. Наконец, снова для программистов на Delphi, дайте мне знать, сколько "IDE schock" я испытываю при использовании WPF, в отличие от WinForms, особенно когда речь идет о поддержке отладчика. Любые комментарии рынка труда, обновленные за 2011 год, также будут оценены.


2
У WPF действительно плохая репутация из-за плохой работы?
Дэвид Хеффернан

9
@ Дэвид: У него действительно есть эта репутация, но, как обычно, реальность не так плоха, как рэп. Графический интерфейс Visual Studio 2010 был переписан в WPF, и на большинстве машин не наблюдается заметного снижения скорости по сравнению с VS 2008. @ Роберт: При этом моя рекомендация была бы очень в пользу WinForms, особенно для конвертирования Delphi. Но я немного сомневаюсь, чтобы опубликовать это как ответ, чтобы он не стал забвением. Все, кажется, одержимы этим, потому что это «старая» технология, как будто это действительно что-то значит.
Коди Грей

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

1
@CodyGray: Вы, должно быть, шутите. VS2010 в сто раз медленнее VS2008, как и WPF. Ваше впечатление, вероятно, связано с обычным уклоном программиста: вы смотрите только на самые последние машины высокого класса, которых нет у большинства обычных пользователей.
Тимви,

Ответы:


21

Если у вас есть опыт работы с Delphi, вы будете разочарованы в WinForms. Вы будете пытаться делать вещи, которые были просты в VCL, только чтобы обнаружить, что они мучительно трудны или даже невозможны. WPF будет намного менее ограничен.

Например, вот лишь некоторые из ограничений WinForms, с которыми мы столкнулись:

  • WinForms не имеет ничего, что можно сравнить с TAction, поэтому, если вы привыкли кодировать с помощью действий, совместно использовать один и тот же текст и значок между элементом меню и кнопкой панели инструментов и меню, вызываемым правой кнопкой мыши, централизуя логику включения и обновляя включенное состояние в фоновом режиме с OnUpdate ... вы будете ненавидеть WinForms, где вы должны делать все это жестким и подверженным ошибкам способом.
  • Старый WinForms (.NET 1.0 vintage) MainMenu не поддерживает изображения рядом с пунктами меню, а новый (представленный в .NET 2.0) MenuStrip пронизан ошибками, которые Microsoft отказывается исправлять (поскольку исправления могут нарушать обратную совместимость).
  • Многие элементы управления, например TreeView, крайне недооценены по сравнению со своими аналогами VCL (крайне медленно, нет рисования владельца, отсутствуют многие параметры настройки и т. Д.)
  • Нет ничего похожего на динамичное сообщество сторонних разработчиков элементов управления, к которому вы привыкли в Delphi. Существуют библиотеки контроля качества, но вы платите за них - бесплатных предложений, таких как VirtualTreeView, просто нет для WinForms.

WPF в некотором отношении немного более скромен, чем WinForms, но он гораздо более расширяем.

  • Вы хотите что-то вроде TAction? В WPF есть ICommand, который так же богат, как вы привыкли (но обязательно прочитайте статью Джоша Смита о MVVM - обычно вам нужно вручную включать / отключать команды при изменении состояния, но его версия автоматически запускает ваш код включения в фоновом режиме, как вы привыкли с OnUpdate).
  • Вы хотите изображения в меню? Это встроено (и нигде не так глючит, как в WinForms).
  • WinForms исключает рисование владельцем некоторых важных элементов управления, но если вы вместо этого используете WPF, вам не нужно рисовать владельца - если вы хотите, чтобы на узлах TreeView был черный текст, за которым в круглых скобках следует синий номер, вы просто поместите его в свой DataTemplate, и он будет работать, без уродливого кода для рисования владельцем.
  • Вы хотите сторонний контроль? Во многих случаях они вам не нужны, потому что вы можете расширить то, что есть, способами WinForms и, да, разработчики VCL могут только мечтать.

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


1
Спасибо за прямой комментарий Delphi. Любые комментарии рынка труда и какая-либо информация, касающаяся поддержки отладчика в VS 2010 для WPF, особенно вопросы трассировки / проверки? Я проверю книгу, с которой вы связаны.
Роберт Ошлер

1
Не знаю о рынке труда. Что касается отладчика, ожидайте разочарования, если конструктор вашего окна выдает исключение, потому что отладчик будет неохотно давать вам трассировку стека - но все, что вам нужно сделать, это копаться в двух уровнях InnerException в диалоговом окне подробностей исключений отладчика. И если ваши привязки не работают, запустите под отладчиком и посмотрите в окне вывода, чтобы увидеть ошибки привязки. Кроме этого, я не уверен, что касается вас. В моем опыте WPF исправляет ошибки, а MVVM позволяет вам тестировать больше логики пользовательского интерфейса, чем вы можете в WinForms.
Джо Уайт

6
Очень крутая кривая обучения. Вы не так много программируете в WPF; Вы задаете вопросы о том, как убедить WPF делать то, что вы хотите.
Ян Бойд

На самом деле, некоторые из самых больших препятствий связаны с обучением работе со структурой, которая должным образом разделяет обязанности, а не с тем, чтобы все слепо происходило от TKitchenSink.
Джо Уайт

1
Могу ли я иметь формы Delphi, но сохранить язык C #? Пожалуйста?
Роберт Харви

13

Я обычно очень удивляюсь, когда люди говорят, что у них не было хорошего опыта работы с WPF. Я разработчик, который перешел с C ++ / MFC на C # / WinForms на C # / WPF. Переход от WinForms к WPF был непростым, потому что изучение XAML не очень легко, но как только вы его освоите, это потрясающая технология. Я, например, не могу вернуться к WinForms. WPF просто потрясающий.

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

  1. Интерфейс, конечно.
  2. Наручники. Просто волшебство. Самая мощная функция после пользовательского интерфейса. Приложения LOB извлекают из этого наибольшую выгоду.
  3. Команды.
  4. Разделение проблем. Дизайнеры работают над дизайном, программисты программируют.
  5. Прикрепленные свойства. Вы можете расширить функциональность сторонних элементов управления без исходного кода (хотя этот пункт вполне может быть частью первого пункта).
  6. Простой переход на Silverlight (как веб, так и WP7)

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

И главная причина в том, что это будущее. Он может быть объединен с Silverlight, но навыки останутся прежними.

Итак, я настоятельно советую вам пойти по пути WPF.


1
Я не говорю, что я не согласен, но все эти причины связаны с пользовательским интерфейсом (хотя вы говорите, что меня беспокоит также то, как люди обычно связывают WPF только с пользовательским интерфейсом )
Эд С.

1
+1 потому что согласен со всеми вашими пунктами. Я должен выбрать, хочу ли я изучать WPF или Winforms, и я выбираю WPF и никогда не жалел об этом. @Ed: Я не вижу ни одного из них как строго связанных с пользовательским интерфейсом, кроме первого.
Рэйчел

1
@ Рейчел: Правда? Привязка используется для обновления пользовательского интерфейса при изменении значения свойства. Разделение проблем в # 4, очевидно, применимо только при разработке пользовательского интерфейса. № 5 - все о стороннем контроле. Нет интерфейса, нет элементов управления. # 6 - снова перевод на пользовательский интерфейс Silverlight. Я что-то пропустил?
Эд С.

3
Я более или менее пошел противоположным путем: WPF -> WinForms -> C ++ / MFC. Да, я бунтарь; Я плыву вверх по течению. Я просто не вижу ничего убедительного в том, что WPF привносит в пользовательский интерфейс. Куча ужасного, не родного на вид программного обеспечения - это не моя идея "прогресса". Кроме того, я не уверен, что шаблоны проектирования, которые многие (включая этот ответ) связывают с WPF, каким-либо образом являются исключительными для WPF. Вы можете использовать шаблоны проектирования на любом языке или в графическом интерфейсе. Разница просто в том, что если вас не принуждают , люди не будут? Легкость перехода на Silverlight - единственная неоспоримая причина.
Коди Грей

5
Моя первая задача с приложением WPF: удалить панель инструментов, сделать ее высотой 14 дюймов. не может быть сделано . Второе задание: установить шрифт формы в соответствии с размером и размером шрифта пользователя. не может быть сделано Третий шаг: добавить элементы в просмотр списка без привязки не может быть сделано, я ухожу.
Ян Бойд

5

Очевидно, что WPF - это способ думать в будущем. Освоить его сложно, но платформа очень хорошо спроектирована и гибка.

Несколько советов:

  • Начните легко: не пытайтесь реализовать свой первый проект, используя только MVVM или модную анимацию. Начните с простых окон, кнопок и списков.
  • Воспользуйтесь преимуществами DataBinding.
  • Купить книгу WPF Unleashed от Адама Натана.

+1. Практический ответ. Старайтесь не реализовывать свой первый проект, используя только MVVM или причудливую анимацию
Картик Сринивасан,

4

Прежде всего я должен отметить, что я в основном разработчик asp.net, хотя раньше я использовал winforms много. Переключение на WPF не так велико, как вы делаете (IMO) через неделю или около того (более 40 часов), большинство из них снова стало второй натурой.

В любом случае, я считаю, что Андерс Хейлсберг является одним из архитекторов WPF, по крайней мере, по мнению издателей этой книги->

« Как один из архитекторов WPF, Крис Андерсон умело объясняет не только« как », но и« почему ». Эта книга является отличным ресурсом для всех, кто хочет понять принципы дизайна и лучшие практики WPF. Андерс Хейлсберг, технический сотрудник корпорации Microsoft

http://www.amazon.com/Essential-Windows-Presentation-Foundation-WPF/dp/0321374479


11
«Как один из архитекторов WPF Крис Андерсон умело объясняет ...» предполагает, что Крис Андерсон является одним из архитекторов WPF. Согласно цитируемому тексту, Андерс Хейлсберг - всего лишь «технический сотрудник» корпорации Microsoft, что не доказывает его причастность к WPF.
Андреас Рейбранд

Ах, это может быть правдой, но это показывает, что он уважает это!

2
Или, по крайней мере, что он уважает Криса.
Брюс МакГи

1
Или, по крайней мере, у отдела по связям с общественностью есть кто-то с репутацией, чтобы сделать комментарий.
quick_now

@Andreas; Хорошая шутка: только "техник". Не желая умалять Криса Андерсона - он отличный парень, ведущий себя немного сдержанно ( msdn.microsoft.com/en-us/ff395959 уже есть, но simplegeek.com давно не обновлялся). Андерс Хейлсберг участвует во многих вещах .NET (технические стипендиаты имеют широкий охват), в конце концов, он - специалист по фреймворку (VCL, WCF и т. Д. - см. Simple-talk.com/content/article.aspx?article=673 и microsoft .com / presspass / exec / techfellow / Hejlsberg / default.mspx ), и есть только несколько технических специалистов ...
Йерун Вирт Плюмерс

2

Winforms практически идентичны разработке Delphi. И, конечно, есть причина для этого. Как объектная модель Delphi / Object Pascal сильно повлияла на C #, так и система форм повлияла на Winforms.

WPF, кажется, направление, в котором все движется; Говорят, что (великолепно!) пользовательский интерфейс VS2010 основан на WPF, в отличие от предыдущих поколений, основанных на Winforms.

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


3
WinForms - это то, что расширяет Delphi, на самом деле это очень расстраивает по сравнению с Delphi. Это больше похоже на VB-3, чем Delphi, и IME уровень плодовитости аналогичен.

2

Я не программист на Delphi, но да, я работал как с WinForm (интенсивно), так и с WPF (менее чем умеренно). Я в некоторой степени согласен с вами в том, что касается уровня разочарования для кого-то, кто будет переходить с WinForm на WPF, поскольку я сам нахожусь в такой ситуации, но только до тех пор, пока я к этому не привыкну. Узнайте, как замечательно и гибко работать с WPF по сравнению с WinForm. У него тяжелая кривая обучения, по крайней мере, для тех, кто пришел из Delphi, а не из Winform. Для вас, безусловно, стоит перейти к WPF, а не к WinForm, и оно того стоит.

Вы можете посмотреть ссылки ниже, чтобы начать с:


1

Я выполнил некоторую работу в Windows Forms (в основном на Pocket PC), а также в другой среде, отличной от .NET, в которой использовались те же принципы. Когда я перешел в WPF около трех лет назад, первые несколько месяцев я ругался на это. В конце концов, это просто «щелкнуло», и я не оглядывался назад - на самом деле я был бы огорчен, если бы мой следующий проект потребовал, чтобы я вернулся к Windows Forms.

Последний раз Windows Forms обновлялся в 2005 году (VS 2005.) Он все еще там, но уже не улучшается Microsoft. WPF - новичок в области настольных приложений, поэтому, если вы собираетесь перейти на платформу .NET с помощью инструментов MS, я бы сказал, что это безопасная ставка. Некоторые люди выдвигают Silverlight в качестве настольного решения, но когда я посмотрел на него как на возможность, я обнаружил, что у него слишком много ограничений (что может иметь смысл в веб-контексте, но не на настольном компьютере).

Итог: есть крутая кривая обучения, и я все еще изучаю ее. Но это того стоило. Это очень весело.


1

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

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

И, наконец, WPF просто веселее. И более мощный.

Кривая обучения круче, я даю вам это. Но это более полезно в конце.


0

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

edit: Как указывалось в приведенной мной ссылке и выделен комментарий Гулшана, Moonlight - это проект с открытым исходным кодом, возглавляемый командой разработчиков mono для обеспечения кроссплатформенной поддержки Silverlight .


Но Лунный свет находится в активной разработке.
Гюльшан

-1

Я был взволнован, когда услышал о WPF, идея звучала великолепно, и все, что я видел, было прекрасным. Однако, когда я пришел использовать его в Visual Studio 2008 (по общему признанию, бета-версия), я обнаружил, что работать в конструкторе / IDE сложно и странно.

В то время я опубликовал небольшую информацию в своем блоге:
http://blog.dantup.com/2007/08/visual-studio-2008-beta-2-first.html
http://blog.dantup.com/2007 /08/wpf-designer-cider-part-2.html

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

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


«Я думаю, что ваше приложение, несомненно, будет выглядеть / чувствовать себя лучше в WPF». Не обязательно - WPF не спасет вас от написания дерьмового интерфейса. У меня есть несколько примеров (один из которых мой, хотя тот был просто быстрым и грязным одноразовым приложением для тестирования некоторых вещей.) Если вы (и те, кто вызывает выстрелы, иначе $$) готовы потратить время и усилия, вы можете сделать некоторые удивительные вещи в WPF.
MetalMikester

Честная оценка. Я имел в виду, что WPF позволяет создавать более красивые приложения, так как вы менее стеснены виджетами Windows. Конечно, это может быть как хорошо, так и плохо!
Дэнни Таппени

3
Определенно плохая вещь. WPF открыл эру совершенно не родных интерфейсов. Трудно понять и даже сложнее смотреть. То, что один человек считает красивым, - худший кошмар другого человека. Оставить «скины» для встроенных элементов управления ОС - это фантастический способ сделать всех счастливыми. С другой стороны, я отказываюсь использовать последние версии Office, потому что не могу перенести интерфейс. Итак, вы знаете, сойдите с моего газона и все такое.
Коди Грей

1
Я бы сказал, что это немного субъективно. Я, вероятно, не хотел бы, чтобы мой Word Pocessor нарушал все эти правила, но некоторые части программного обеспечения могут сойти с рук. Например. одним из лучших примеров WPF, который я помню, был Yahoo - для меня это большое улучшение в приложении на основе виджетов Windows: blogs.msdn.com/cfs-filesystemfile.ashx/__key/…
Дэнни Таппени,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.