Программа и команда разница

В WPF и MVVM существует четкая парадигма использовать команды, наследующие ICommand, отделяющие логику от представления и т.д. Однако, после перехода с событийной модели на MVVM не совсем понятно, в чём их отличия от обработчиков событий?

Отслеживать
задан 22 мар 2020 в 9:59
59 5 5 бронзовых знаков
Вы ведь сами написали отделяющие логику от представления .
22 мар 2020 в 10:03

Хотелось бы более развернутого ответа, не повторяющего мои же слова или документации MSDN, потому что, если знать, в чём отличия, то так легче понять, что из себя представляет та или другая структура. То, что они отделяют логику от представления — это их смысл, а то, как они это делают и почему обработчики событий не подходят — вот, что мне интересно.

22 мар 2020 в 10:10

Обработчики подходят, почему нет? Просто в WPF есть двухсторонние привязки, которые делают код менее связным и их удобнее использовать чем события

22 мар 2020 в 10:14

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Лучшая IDE для Python!

Попробую своими словами, так как сам недавно слез с WinForms-подхода на MVVM и рад этому. Мой дилетантский взгляд, на гениальность не претендую.

  • Обработчик события получает ссылку на контрол в sender и все необходимые данные о событии в EventArgs . Далее можно делать с ними что требуется: менять поведение контрола, или слать данные куда подальше. Набор входных данных фиксирован и не кастомизируется.
  • Событие вызывается тогда, когда нам надо, нажата клавиша, наведена мышь, и так далее. Есть много разных событий, которые могут подойти практически под любой вид задач.
  • Находятся все в одном классе
  • Сложно тестировать
  • Находятся где угодно, куда можно ссылаться при объявлении Binding , по умолчанию там, куда ссылается DataContext .
  • В команду можно передать любой аргумент.
  • Команду можно вызвать когда надо через прямое подключение, например к кнопке, или через KeyBindings .
  • Разрешено ли выполнять команду, узнать можно до начала ее выполнения, условие помещается в CanExecute . При этом многие контролы имеют встроенную реакцию на CanExecute, и например сами могут переводить свое состояние в Disabled , если CanExecute вернет false (например MenuItem или Button ). Это удобно.
  • Легко тестировать просто вызвав команду отдельно из тестового метода.

Команды при этом не всегда нужны, например они не нужны, если мы хотим что-то сделать, если у контрола меняется какое-то свойство. В этом случае мы просто можем забиндить само свойство и выполнять код по факту изменения свойства. Так же команды не нужны, чтобы менять внешний вид или поведение контрола. В 99% случаев, это решается прямо в xaml с помощью стилей и шаблонов.

Читайте также:
В каком году была написана программа hypertext

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

Наиболее удобный способ использования команд, на мой взгляд, лучше всего описан здесь в разделе Relaying Command Logic.

Telnet, SSH, консоль и терминал — что это и зачем нужно?

Источник: ru.stackoverflow.com

Русские Блоги

Те, кто изучал ассемблер или Си, должны знать, что означает инструкция вызова. На самом деле, это означает то же самое здесь. В пакетных сценариях команда call используется для вызова другого пакетного сценария из одного пакетного сценария.

Грамматика: вызов [[Drive:] [Path] FileName [BatchParameters]] [: label [arguments]]

Параметр: [Drive:] [Path] FileName Указывает местоположение и имя вызываемой пакетной программы. Параметр Filename должен быть файлом типа с расширением .bat или .cmd.

BatchParameters Определяет информацию командной строки (то есть элементы параметров), необходимые для пакетной программы.  

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

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

приложение вызова команды

1. Основное применение. Пример приложения: создайте два новых текстовых файла, один с именем call1, измените тип файла на bat, откройте редактирование контента с помощью Notepad ++ как:

echo running call1

Другой называется call2, тип файла изменен на bat, а содержимое редактирования, открытое с помощью Notepad ++:

Дважды щелкните, чтобы выполнить файл call2, результат выполнения будет следующим:

Хорошо видно, что вызов call аналогичен логике выполнения вызова функции: call2 эквивалентен выполнению основной функции. Во время выполнения необходимо вызвать функцию call1. Когда выполнение call1 заканчивается, основная функция call2 продолжает выполнять сама Заказ до конца всего процесса.

2. Вспомните этикетку. Пример приложения: создайте два новых текстовых файла, один с именем call3, измените тип файла на bat, откройте редактирование контента с помощью Notepad ++ как:

Другой называется call4, тип файла изменен на bat, а содержимое редактирования, открытое с помощью Notepad ++:

Выполните файл call4 двойным щелчком мыши, результат выполнения будет следующим:

Каково это увидеть этот результат? Что тебе напоминает? Не могу вспомнить что? Если вы выглядите смущенным, вы знаете, что вы перепутали Goto с этим! Пожалуйста, посмотрите разницу между командой вызова и командой goto ниже.

3. Вызовите пакетную обработку с параметрами. Пример приложения: создайте два новых текстовых файла, один с именем call7, измените тип файла на bat, откройте редактирование контента с помощью Notepad ++ как:

Читайте также:
Прекращена работа программы xr 3da exe Stalker как исправить

echo %1 %2 echo %3

Другой называется call8, тип файла изменен на bat, а содержимое редактирования, открытое с помощью Notepad ++:

Выполните файл call8 двойным щелчком, и результат выполнения будет следующим:

Разница между командой вызова и командой goto

В примере приложения 2 команды call мы увидели, что команда call вызывает метку перехода. Обратите внимание, что вызову должен предшествовать двоеточие, а goto следует непосредственно за именем метки.

Как и в предыдущем примере, давайте посмотрим на эффект выполнения goto: создайте два новых текстовых файла, один с именем call5, измените тип файла на bat и откройте редактируемый контент с помощью Notepad ++ как:

Другой называется call6, тип файла изменен на bat, а содержимое редактирования, открытое с помощью Notepad ++:

Выполните файл call6 двойным щелчком, и результат выполнения будет следующим:

Сводка команды запуска

Введение в команду запуска

Команда запуска более сложная. Шаги для просмотра справочной документации:

1. Одновременно нажмите клавиши «Win + R» (или на рабочем столе пуск-> пуск-> запустить), откройте окно «Выполнить», введите «cmd» -> OK.

2. В открывшемся окне командной строки введите start /? -> Enter, чтобы просмотреть параметры и инструкции по использованию команды «start» (Примечание: нажмите любую клавишу, чтобы просмотреть больше следующего содержимого). Примеры снимков экрана:

3. В окне командной строки, в соответствии с вашими потребностями, введите-> Пуск / Конкретные параметры-> Ввод, вы можете использовать команду «Пуск» в системе Windows в соответствии с вашими потребностями

запустить командное приложение

1. Основное применение. Откройте системный калькулятор и блокнот.

Создайте новый текстовый файл, назовите его start1, измените тип файла на bat, откройте редактирование контента с помощью Notepad ++ как:

start calc start notepad exit

Результат выполнения: Откройте калькулятор и блокнот отдельно, и терминал мигает одновременно (потому что последний выход).

Разница между командой запуска и командой вызова

Пример применения команды start: создайте два новых текстовых файла, один с именем startmain, измените тип файла на bat и откройте редактируемый контент с помощью Notepad ++:

Один из них называется startchild, тип файла изменен на bat, а содержимое редактирования, открытое с помощью Notepad ++:

Запустите файл startmain.bat, дважды щелкнув его, и просмотрите результат выполнения, как показано ниже:

Для того же приложения, если вы переключитесь на команду call: создайте два новых текстовых файла, один с именем callmain, измените тип файла на bat, используйте Notepad ++ для открытия и редактирования содержимого:

Один из них называется callchild, тип файла изменен на bat, а содержимое редактирования, открытое с помощью Notepad ++:

Выполните callmain.bat, дважды щелкнув мышью, и просмотрите результат выполнения, как показано ниже:

Результаты анализа:

В примере приложения переменная a определена в main.bat со значением 1, переменная b определена со значением 20 в child.bat.

Main.bat сначала выполняет вызов child.bat, затем child.bat выполнит echo% a%, теперь он может нормально отображать 1.

Читайте также:
Программа сандра как пользоваться

После вызова main.bat выполнит echo% b% и может нормально отображать 20.

Затем, если вызов изменяется на запуск, после того, как child.bat будет выполнен, а затем закрыт, main.bat продолжает отображать% b%, и значение переменной b не может быть отображено, что эквивалентно только выполнению команды echo. Результат выполнения: ECHO находится в Отключено.

При вызове они имеют одинаковую оболочку cmd.exe в одном и том же процессе, поэтому их переменные совместимы.

При запуске они имеют две оболочки cmd.exe, но child.bat можно рассматривать как дочерний процесс main.bat, дочерний процесс может читать переменные в родительском процессе (то есть, значение a).

подводить итоги

Во-первых, область вызова отличается:

call в основном используется для выполнения пакетных внутренних вызовов, таких как call: pend, и некоторых команд dos, таких как call set = test = 2, но может также вызывать другие исполняемые файлы, а start не может выполнять внутренние вызовы, но может выполнять основные Во всех внешних программах вы также можете запустить оболочку, например, открыть папку start «» «% WINDIR%», установить запуск сетевого принтера «» «IP Printer» и т. Д.

Второе — это разные методы вызова:

Вызов — это в строгом смысле вызов. Когда вызывается другой пакет, он выполняется в том же оконном процессе и запускается, поэтому, когда выполняется другой пакет, он выполняется в другом оконном процессе. Другими словами, он выполняется во вновь открытом процессе. Хотя параметр b можно добавить для запуска, результат совершенно другой.

Например, если мы используем call set = test = 2 и start / b set test = 2, результаты выполнения кажутся одинаковыми, но мы обнаружили, что у последнего есть два процесса, и для выхода необходимо выполнить exit дважды в форме, поэтому, когда мы используем После начала выполнения пакета лучше всего добавить выход в вызываемый пакет, в противном случае вы не сможете выйти из формы dos вызываемого пакета, но если вы используете вызов для вызова, если в вызываемом пакете есть выход Будет напрямую завершена оригинальная и вызванная пакетная программа, что является очень серьезной проблемой. Рекомендуется использовать goto: eof вместо выхода в вызываемой партии.

В-третьих, результат вызова отличается:

Вызов call может не только передавать параметры или переменные вызываемому пакету, но и вызываемый пакет может устанавливать параметры или переменные для возврата, но start может только передавать параметры или переменные вызываемому пакету, но не может Возвращение параметров или переменных на самом деле является продолжением второй точки. Кроме того, мы должны также обратить внимание на: при использовании вызова для вызова других пакетов, если мы используем команду goto в вызываемом пакете, рекомендуется использовать другое имя тега для перехода из исходного пакета, в противном случае это может Переход к исходному пакету без гарантии полного выполнения всех операторов в вызываемом пакете.

Источник: russianblogs.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru