Я видел несколько упоминаний об этом в Stack Overflow, но просмотр Википедии (соответствующая страница с тех пор была удалена) и Демонстрация динамического диалога MFC не помогли мне просветить. Может кто-нибудь объяснить это? Изучение принципиально иной концепции звучит неплохо.
Основываясь на ответах: я думаю, что чувствую это лучше. Думаю, я просто недостаточно внимательно посмотрел исходный код в первый раз. На данный момент у меня смешанные чувства по поводу дифференцированного исполнения. С одной стороны, это может значительно облегчить определенные задачи. С другой стороны, настроить его и запустить (то есть настроить на выбранном вами языке) непросто (я уверен, что было бы, если бы я понял это лучше) ... хотя я предполагаю, что набор инструментов для этого нужно сделать только один раз, а затем при необходимости расширить. Я думаю, что для того, чтобы по-настоящему понять это, мне, вероятно, нужно попробовать реализовать это на другом языке.
Я думаю, что упускаю что-то важное. Прямо сейчас я думаю: «это просто». Если бы я действительно это понимал, я бы подумал: «Это просто. И действительно потрясающе и полезно».
Я делал это так много раз на стольких языках, что замалчиваю тяжелые уроки, которые усвоил на этом пути, например важность макроса P и DD_THROW. Но когда вы освоитесь, вы сможете делать так много, что это вызывает привыкание.
... Я до сих пор вижу, как люди представляют MVC как лучшую вещь, и я думаю, что лучше уйду на пенсию, чем придется делать это снова.
Отвечая на ваше редактирование, я понимаю ваши смешанные чувства, потому что это другой образ мышления, и создание небольшого примера самому может быть лучшим способом понять это. Вы правы, набор инструментов нужно делать только один раз и при необходимости расширять.
Я дал второй ответ, который дает игрушечную реализацию, которую вы можете пройти. (Я пробовал код, так что он работает.)
@Mike Dunlavey: предназначена ли DE в первую очередь как альтернатива MVC для представления данных и манипулирования ими? Читая вашу вики и ваши записи здесь, я не могу сказать, применима ли DE для других целей. Спасибо.
@Toybuilder: Dynamic Dialogs - альтернатива MVC и одно (основное) приложение DE. Я также использовал DE как способ обнаружения изменений в небольшой базе данных, которая не полагается на перехват событий изменений. Я также пробовал это для общей "отмены" - путем сжатия FIFO.
... для "отмены" вы сериализуете / десериализуете данные и отделяете файл, который является XOR из двух, который в основном равен нулю, поэтому легко сжимается. Используйте это, чтобы восстановить предыдущие данные. Теперь обобщаем на произвольную структуру данных.
@MikeDunlavey, пожалуйста, поделитесь своими примерами! Я имею в виду библиотеку или исходный код. Также я заметил, что ваша демо-версия MFC Dynamic Dialog - это GPL, что, конечно, вы делаете по своему выбору, но для меня это неудобно. :)
@ Проф. Фалькен: Я действительно ничего не знаю о лицензиях. Если вы можете предложить лучший вариант и, может быть, как его изменить с того, что есть, я буду рад. Что касается примеров, я должен подумать, чем я могу поделиться. Я сделал личное приложение на C++ для закрытия благотворительных аукционов. Он делает много этого. Может быть, это было бы хорошо.
@MikeDunlavey, это приложение отлично звучит, потому что оно делает что-то реальное. Действительно простой лицензией для понимания и использования во всех видах приложений, в том числе коммерческих с закрытым исходным кодом, является лицензия MIT: opensource.org/licenses/MIT(GPLv2 также хороша тем, что это Легко понять, но ограничивает то, что вы можете делать с кодом.) Если вы единственный значительный автор, вы можете просто изменить лицензию в любое время на MIT или любая другая лицензия - вы являетесь правообладателем. Видео не смотрел, посмотрю позже.
@ Проф. Фалькен: Хорошо, я пытаюсь это сделать. Они дали мне новую 64-битную машину W7 и обновили меня до VS 2013, поэтому мне пришлось переустановить MySQL, и я изо всех сил пытаюсь перестроить приложение. Я постараюсь сделать это сегодня, а потом выложу в SF. Спасибо за интерес.
Не хочу увеличивать вашу рабочую нагрузку, @MikeDunlavey, но если вы пропустили это, Source Forge попал в немилость из-за сомнительной деловой практики. Github.com - это то место, где сейчас крутятся крутые ребята. У них есть действительно хороший клиент Windows для W7 по адресу desktop.github.com
@ Prof.Falken: Я только что сделал свой первый пост на github под своим именем и AucUI. Надеюсь, я все сделал правильно :)
@MikeDunlavey, мне нравится! Я снял тебя в главной роли. :) Вы можете добавить LICENSE.txt
@ Prof.Falken: Удачи с этим? Я искал вашу электронную почту, чтобы спросить об этом, но получил не того человека.
@MikeDunlavey Между тем у меня возникли проблемы с COM +. :)
@ Prof.Falken: На GitHub есть начальная минимальная реализация на Javascript под моим именем под моим именем DiffExeInJS.





Дифференциальное выполнение - это стратегия изменения потока вашего кода на основе внешних событий. Обычно это делается путем манипулирования какой-либо структурой данных для записи изменений. Это в основном используется в графических пользовательских интерфейсах, но также используется для таких вещей, как сериализация, когда вы объединяете изменения в существующее «состояние».
Базовый поток выглядит следующим образом:
Start loop:
for each element in the datastructure:
if element has changed from oldDatastructure:
copy element from datastructure to oldDatastructure
execute corresponding subroutine (display the new button in your GUI, for example)
End loop:
Allow the states of the datastructure to change (such as having the user do some input in the GUI)
У этого несколько преимуществ. Во-первых, это разделение выполнения ваших изменений и фактического манипулирование вспомогательными данными. Что приятно для несколько процессоров. Во-вторых, он обеспечивает метод с низкой пропускной способностью. информирования об изменениях в вашей программе.
Я считаю эту концепцию очень похожей на конечные автоматы классической цифровой электроники. Особенно те, которые помнят свой предыдущий результат.
Машина, следующий вывод которой зависит от текущего ввода и предыдущего вывода согласно (ВАШ КОД ЗДЕСЬ). Этот текущий ввод - не что иное, как предыдущий вывод + (ПОЛЬЗОВАТЕЛЬ, ВЗАИМОДЕЙСТВИЕ ЗДЕСЬ).
Заполните поверхность такими машинами, и она будет интерактивной для пользователя и в то же время представляет собой слой изменяемых данных. Но на этом этапе это все еще будет глупо, просто отражая взаимодействие пользователя с базовыми данными.
Затем соедините машины на вашей поверхности, дайте им возможность делиться заметками в соответствии с (ВАШ КОД ЗДЕСЬ), и теперь мы сделаем это умным. Он станет интерактивной вычислительной системой.
Таким образом, вам просто нужно предоставить свою логику в двух местах в приведенной выше модели; об остальном позаботится сама конструкция машины. Вот что в этом хорошего.
Я, кажется, помню, что когда это пришло мне в голову, действительно имел в виду аппаратную модель.
Спасибо за проявленный интерес, Брайан. Мне интересно, что что-то простое кажется разочаровывающим. Для меня самые красивые вещи просты. Заботиться.