Стоит ли учить windows forms

Обновлено: 05.07.2024

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

Одним из самых важных различий между WinForms и WPF является тот факт, что в WinForms интерфейс пользователя это всего лишь графический слой, использующий стандартные элементы управления Windows (например TextBox), а WPF-интерфейс, в свою очередь, построен "с чистого листа", не опираясь в большинстве случаев на стандартные элементы. Это может показаться весьма тонкой гранью между рассматриваемыми моделями, но в действительности это не так, и Вы обязательно обратите на это внимание при работе с фреймворком, базирующимся на Win32/WinAPI.

В качестве примера вышеописанной ситуации можно рассмотреть кнопку с изображением и текстом на ней. Этот элемент управления не является стандартом Windows, и, в таком случае, WinForms не предоставляет готового решения. В результате Вы будете вынуждены создать изображение и заимплементировать собственную кнопку, поддерживающую изображения либо воспользоваться готовыми нестандартными решениями. Кнопка в WPF, в свою очередь, может иметь внутри что угодно, так как это просто "рамка", содержащая графический контент, находящаяся в разных состояниях (например: нажатая, ненажатая, реагирующая на наведенный курсор). Ее можно трактовать как "невидимую" (это относится к большинству других элементов управления WPF), это значит, что она может содержать в себе ряд других элементов внутри. Вы хотите получить кнопку с изображением и текстом? Просто поместите элементы Image и TextBlock внутрь кнопки и она готова! В рамках элементов управления WinForms Вы просто не ощутите той гибкости при разработке, что является причиной процветания рынка, который предлагает готовые простые реализации таких элементов как "кнопка с изображением" и подобных.

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

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

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

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

Я бы сказал, что Windows Forms отлично подходит для приложений, управляемых формой. WPF / Silverlight отлично подходит для анимационных и графических приложений.

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

Если вы веб-разработчик или дизайнер, работающий в WPF, может показаться более похожим на проектирование веб-страницы, поскольку вы работаете в XAML и имеете мелкозернистый контроль над интерфейсом.

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

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

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

Я бы сказал, что WinForms хорошо знать, но я бы вложил больше времени в WPF. WPF имеет сходство с Silverlight, и это даст вам больше оснований для работы.

Это, как говорится, никогда не помешает узнать больше :)

все зависит от того, где вы работаете и чем вы сейчас занимаетесь.

Если вам удастся получить работу, где они разрабатывают что-то новое, тогда ответ будет "нет", поскольку я надеюсь, что они будут использовать WPF или Silverlight.

Если, однако, вы получаете работу, где они поддерживают существующее приложение, то ответ будет "да" - даже если они преобразуют его, поскольку вы будете поддерживать старое приложение довольно долго.

обе технологии имеют свои strenghs и слабость.

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

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

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

Ну, если вы удивительны с цветами и пользовательским опытом :) WPF для вас.

WPF дает вам большую силу, и с большой силой приходит большая ответственность.

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

обоснование простое-почему на земле тратят вдвое больше усилий на WPF, когда нам нужно тратить время на таргетинг конкурирующих платформ. Пространство GUI полностью фрагментируется. WPF никогда не будет кросс-платформенным и часами в WPF minutia уменьшает вероятность поддержки Cocoa, Linux. Кроме того, похоже, что Microsoft сбросила WPF в пользу удивительного Javascript и сложного HTML 5.

лично я предпочитаю компонентно-ориентированные GUI-фреймворки над фреймворками на основе MVC по той простой причине, что с ними проще и быстрее писать. Я не согласен с тем, что MVC-лучший шаблон для всей разработки GUI. Да у него есть свое место в мире, как в веб-разработке, где технология уровня презентации продвигается боком с наименьшим общим знаменателем браузера.

IMO есть место для вилки WinForms 3, с открытым исходным кодом и с глазом для правильной кросс-платформенной поддержки.

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

а также, WPF, возможно, проще, если у вас есть какая-то основа.

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

многие компании находят опыт, чтобы перенести свое решение на веб-основе. Компании используют технологии виртуализации, такие как Citrix и App-V, для доставки программного обеспечения через Интернет без необходимости разработки новых решений.

Ваша история

Классические приложения в наше время

До эпохи Интернета классические приложения для настольных ПК были основным подходом к созданию программных систем. Разработчики могли выбрать любой язык программирования, например COBOL, Fortran, VB6 или C++. Но разрабатывали ли они небольшие средства или сложные распределенные архитектуры, — все это были приложения для настольных ПК.

Затем технологии Интернета начали перекраивать весь мир разработки и притягивать все больше разработчиков за счет таких преимуществ, как простое развертывание и упрощенные процессы распространения. Тот факт, что после развертывания веб-приложения в рабочей среде все пользователи получали автоматические обновления, оказал огромное влияние на гибкость программного обеспечения.

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

Ниже приведены некоторые причины для выбора разработки классических приложений для настольных ПК:

  • Классические приложения лучше взаимодействуют с ПК пользователя.
  • Производительность таких приложений при сложных вычислениях значительно выше, чем производительность веб-приложений.
  • Выполнение пользовательской логики на стороне клиента возможно, но намного сложнее при использовании веб-приложений.
  • Использование многопоточности проще и эффективнее в классическом приложении.
  • Обучение разработке пользовательских интерфейсов можно выполнить быстро. И в случае WinForms оно интуитивно, с тем же интерфейсом на основе перетаскивания, что и в конструкторе Windows Forms.
  • Вы можете легко начать программировать и тестировать алгоритмы без необходимости настраивать серверную инфраструктуру и не заботясь о проблемах подключения, брандмауэрах и совместимости с браузерами.
  • Отладка является мощным средством по сравнению с веб-отладкой.
  • Доступ к аппаратным устройствам, таким как камера, Bluetooth или устройства чтения карт, очень прост.
  • Так как технология уже не нова, существует множество экспертов по ней и база знаний, доступная для разработки настольных приложений.

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

С течением времени корпорация Майкрософт предложила многие технологии пользовательского интерфейса для настольных систем, от Win32, представленной в 1995 г., до универсальной платформы Windows (UWP), выпущенной в 2016 г.

Технологии для настольных систем Майкрософт

В соответствии с опросом, опубликованным Telerik в апреле 2016 г., наиболее популярными технологиями для создания классических приложений Windows являются Windows Forms, WPF и UWP.

Опрос Telerik, демонстрирующий Windows Forms, WPF и UWP в качестве наиболее популярных технологий для настольных систем

Windows Forms

Впервые выпущенная в 2002 году, Windows Forms является управляемой платформой и самой старой, наиболее часто используемой технологией для настольных программ, основанной на подсистеме интерфейса графических устройств Windows (GDI). Она предлагает гладкое перетаскивание для разработки пользовательских интерфейсов в Visual Studio. В то же время Windows Forms полагается на конструктор Visual Studio в качестве основного способа разработки пользовательского интерфейса, поэтому создание визуальных компонентов из кода в ней нетривиально.

В следующем списке перечислены основные характеристики Windows Forms:

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

Вот основные особенности WPF.

UWP — это не только платформа представления, такая как WPF и Windows Forms, но и сама платформа. Эта платформа содержит:

  • Собственный набор API (API среды выполнения Windows).
  • Новую систему развертывания (MSIX).
  • Современную модель жизненного цикла приложений (с низким энергопотреблением).
  • Новую систему управления ресурсами (на основе PRI-файлов).

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

Структура UWP

UWP содержит платформу представления, основанную на XAML, похожую на WPF, но имеющую некоторые важные отличия, такие как:

  • Приложения выполняются в контейнерах приложений. Контейнеры приложений управляют ресурсами, к которым может получить доступ приложение UWP.
  • Поддерживается только в Windows 10.
  • Приложения можно развертывать с помощью Microsoft Store для упрощения развертывания.
  • Разработана как часть API среды выполнения Windows API.
  • Содержит обширный набор полнофункциональных встроенных элементов управления и дополнительные элементы управления, доступные через пакеты NuGet библиотеки Microsoft UI (библиотека WinUI), обновляемые каждые несколько месяцев.

История двух платформ

В течение последних 20 лет, в то время как технологии пользовательского интерфейса для настольных систем совершенствовались на их пути от Windows Forms к UWP, оборудование также развивалось от тяжелых системных блоков с небольшими ЭЛТ-мониторами до мониторов с высоким разрешением и легких планшетов и телефонов с различными методами ввода данных, такими как сенсорный экран и рукописный ввод. Эти изменения привели к созданию двух различных концепций: классического приложения и современного приложения. Современное приложение — это программа, которая учитывает различные форм-факторы устройств, разнообразные методы ввода-вывода и использует современные функции настольных систем при работе в изолированной модели выполнения. Классическое приложение (оно же приложение для настольных систем), с другой стороны, является приложением, которому необходим надежный интерфейс пользователя с высокой плотностью элементов управления, который лучше использовать с мышью и клавиатурой.

В следующей таблице показаны различия между этими двумя концепциями:

Сравниваемый аспект Современное приложение Классическое приложение
Безопасность Вложенное исполнение & отличные основы. Разработано с нуля, чтобы учитывать конфиденциальность пользователя, управлять временем работы батареи и уделять все внимание обеспечению безопасности устройства. Пользователь & уровень безопасности администратора. У вас есть собственный доступ к папкам реестра и жесткому диску.
Развертывание Установка и обновления управляются платформой. MSI, пользовательские установщики & обновления. Традиционный источник головной боли для разработчиков и ИТ-управленцев.
Distribution Доверенное распространение & подписанные пакеты. Распространение выполняется из надежного источника, а не из Интернета. Сеть, SCCM & пользовательское распространение. Отсутствие контроля над тем, что, как установлено, влияет на весь компьютер.
Пользовательский интерфейс Современный пользовательский интерфейс. Различные механизмы ввода, рукописный ввод, касание, джойстик, клавиатура, мышь и т. д. Windows Forms, WPF, MFC. Предназначен для работы с мышью и клавиатурой для обеспечения плотного пользовательского интерфейса и получения максимальной производительности от рабочего стола.
Данные Первые облачные данные с аналитическими сведениями. Источник истины в облаке. Аналитические сведения о том, что происходит с вашим приложением и как оно работает. Локальные данные. Для классических приложений обычно требуются какие-то локальные данные.
Конструирование Для использования различными способами. Предусмотрено использование на различных платформах, внешних интерфейсах и серверных системах, с задействованием ресурсов в как можно большем числе мест. Предназначено только для настольных ПК Windows.

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

Двусторонняя работа между современными приложениями и классическими приложениями

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

Перенос сценариев для классических приложений на платформу современных приложений

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

Перенос функций современных приложений в классические приложения

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

Пути к модернизации

Структура этого руководства содержит три различные оси для выполнения модернизации: современные функции, развертывание и установка.

Современные функции

Предположим, у вас есть рабочее приложение Windows Forms, используемое торговыми представителями компании для заполнения заказа клиента. Новое требование состоит в том, чтобы позволить клиенту подписывать заказ с помощью пера планшета. Рукописный ввод встроен в современные операционные системы и технологии, но он был недоступен при разработке приложения.

Этот путь покажет вам, как можно использовать современные функции для настольных систем в существующих разработках для настольных систем.

Развертывание

Установка

Настольные приложения всегда полагаются на процесс установки, прежде чем пользователь сможет приступить к их использованию. Этот факт позволяет использовать набор технологий, от MSI и ClickOnce до пользовательских установщиков или даже развертывания с помощью XCOPY. Все эти методы сталкиваются с проблемами, требующими аккуратности, так как приложениям требуется способ доступа к общим ресурсам на компьютере. Иногда установке требуется доступ к реестру для вставки или обновления новых значений ключей, иногда для обновления общих библиотек DLL, на которые ссылается основное приложение. Такое поведение создает непрерывную головную боль для пользователей и порождает впечатление, что после установки какого-либо приложения компьютер уже не вернется в исходное состояние, даже если потом его удалить.

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

Я только что закончил два приложения WinForm как часть интенсивного курса. Просто интересно о технологии в целом. нужно ли переходить на что-то новое или WinForms по-прежнему жизнеспособны в будущем?

спросил(а) 2010-04-28T23:25:00+04:00 11 лет, 6 месяцев назад

многие компании находят, что им приходится переносить свое решение на веб-сайт. Компании используют технологии виртуализации, такие как Citrix и App-V, для доставки своего программного обеспечения через Интернет без необходимости разработки новых решений.

ответил(а) 2013-01-21T17:55:00+04:00 8 лет, 10 месяцев назад

Я бы сказал, что Windows Forms отлично подходит для приложений с формами. WPF/Silverlight отлично подходит для анимационных и графических приложений.

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

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

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

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


Winforms

  • В приложении Windows формы Windows предоставляют оболочку, состоящую из набора классов C ++, для разработки приложений Windows, и каждый элемент управления в приложении формы Windows является конкретным экземпляром класса. Он предоставляет различные элементы управления, такие как текстовые поля, кнопки, метки и веб-страницы, а также параметры для создания настраиваемого элемента управления. Для этого в Visual Studio имеется инструмент конструктора форм Windows, который обрабатывает элементы управления в форме и упорядочивает их в соответствии с желаемым макетом для добавления кода для обработки событий.
  • В формах Windows настройка приложения - еще одна функция для создания, хранения и обслуживания информации. Класс формы Windows можно расширить с помощью наследования для разработки инфраструктуры приложения, которая обеспечивает абстракцию и возможность повторного использования кода. Формы должны быть компактными с элементами управления на ограниченном размере. Формы могут быть разбиты на куски, упакованные в сборки, которые могут автоматически обновляться. Разработка приложения обеспечивает масштабируемость и гибкость с легкостью для отладки и обслуживания. Формы Windows не могут быть переданы через границы домена приложения.
  • Основными компонентами архитектуры WPF являются структура представления, ядро ​​представления и mallcore. В WPF элементы пользовательского интерфейса разработаны в XAML, а поведение может быть реализовано на процедурном языке. С XAML в WPF программисты могут работать параллельно с дизайнерами. WPF - это мощная среда для создания приложений Windows, обладающая такими замечательными функциями, как привязка данных, медиа-сервисы, шаблоны, анимация, direct3D и альтернативный ввод.
  • Разработка приложений WPF может быть выполнена с помощью инструментов Microsoft, таких как Visual Studio и Expression Blend. VS в основном используется разработчиком для создания приложения WPF, а Blend в основном используется разработчиками для приложений WPF.

Сравнение лицом к лицу между Winforms и WPF (Инфографика)


Ниже приведены 6 лучших сравнений Winforms и WPF:

Ключевые различия между Winforms и WPF

Обе Winforms против WPF являются популярным выбором на рынке; Давайте обсудим некоторые основные различия между Winforms и WPF:

  1. Формы Windows не являются векторным интерфейсом. Принимая во внимание, что WPF - это уровень представления пользовательского интерфейса на основе векторной графики. Благодаря векторной основе он позволяет уровню представления плавно масштабировать компоненты пользовательского интерфейса без каких-либо проблем с искажением размера.
  2. Формы Windows легче использовать при разработке приложений, тогда как WPF не так сложен в использовании, так как для его использования требуются хорошие знания.
  3. В окнах форм мы можем настроить элементы управления в соответствии с требованиями. В WPF у нас есть сторонние элементы управления, чтобы обогатить возможности приложений.
  4. Окна формы имеют меньшую кривую обучения. Принимая во внимание, что WPF имеет большую кривую обучения, что требует понимания всего потока элементов управления и дизайна.
  5. Окна форм меньше времени или сложнее. WPF сложнее и требует больше времени для разработки приложений.
  6. Формы Windows не используются для разработки новых приложений. WPF используется в основном для разработки новых приложений.
  7. Формы Windows являются большой поддержкой с точки зрения разработчиков, интернет-сообщества, библиотек для помощи любого рода при разработке приложения для начинающих. WPF также имеет достаточно поддержки и библиотек для разработки приложений и быстрого получения поддержки для начинающих.
  8. В формах Windows элементы управления сложно настроить, тогда как в WPF элементы управления можно легко настроить, так как они полностью написаны с нуля.
  9. Формы Windows плохо обеспечивают согласованность. WPF обеспечивает большую согласованность приложений.
  10. В формах Windows пользовательский интерфейс был разработан с помощью языка бизнес-логики. В WPF он использует XAML в качестве языка разметки для разработки пользовательского интерфейса приложения
  11. Формы Windows в основном основаны на пикселях, тогда как WPF не основан на пикселях, что позволяет масштабировать часть пользовательского интерфейса для приложения.
  12. Формы Windows поддерживают привязку данных ограниченным образом, тогда как WPF полностью поддерживает привязку данных.
  13. Формы Windows не используются с разными темами или оболочками. WPF в основном поддерживает скины или темы, где для пользовательского интерфейса могут использоваться различные скины или темы.
  14. Формы Windows требуют меньше усилий для разработки пользовательского интерфейса. WPF требует больше усилий, так как большую часть работы нужно выполнять самостоятельно.

Winforms против WPF Сравнительная таблица

Ниже приведено лучшее сравнение между Winforms и WPF:

Winforms

WPF

Вывод - Winforms против WPF

Winforms и WPF используются в основном для одной и той же цели при разработке и проектировании приложений для Windows, но WPF можно использовать и для веб-приложений. Разница между ними заключается главным образом в масштабируемости и производительности, поскольку WPF может рендериться быстрее по сравнению с формами окон, сложностью и поддержкой.

Рекомендуемая статья

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

Читайте также: