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

Хорошо известный шаблон Command часто используется, когда вы хотите реализовать модель с возможностями Undo/Redo. Я ищу эталонную реализацию (пример) простой формы Delphi, которая реализует отмену/повтор.

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

Кто-нибудь видел хорошо продуманный подход Delphi к многоуровневой поддержке отмены/повтора для сложной конструкции модель-представление-контроллер с использованием отдельного представления (формы) Delphi и объектов модели (объекты данных обновляются синхронно со всеми изменениями в форме, и логика проверки и контроля не встроена в форму или модель, а отделена.

Мне кажется, что если бы вам не нужно было использовать MVC, и вам нужно было просто создать прототип демонстрационного приложения Delphi, в котором не было объектов модели или контроллера, то Undo/Redo чистого простого Delphi "одна форма-моя -app" было бы проще разработать, но это усложнилось бы, поскольку вам нужно записывать и воспроизводить объекты и синхронизировать их с действиями форм Delphi, такими как TEdit.OnChange.


person Warren P    schedule 06.08.2010    source источник


Ответы (2)


Вы должны использовать следующие шаблоны:

  • Model-GUI-Mediator
    -- synch between objects model and GUI control, so you are no limited by TDataset and DB-Aware controls. You can create object-aware controls from EVERY VCL controls.
  • Command
    --your ACTIONS on the objects model. Should be fired by Controllers.
  • Memento
    --saving internal state of Data Objects for implementing the Undo/ReDo behavior

Как можно скорее я опубликую простой пример в своем блоге www.danieleteti.it

person Daniele Teti    schedule 07.08.2010
comment
Отлично. Это помогает, потому что в настоящее время это модель, которую использует существующий код, который я исправляю (не написанный мной), поэтому действительно полезно знать, что кто-то другой сделал бы именно это. Они назвали свой класс помощником, но это явно посредник, и это действия над объектом, запущенным контроллером, и штука Memento интересная. Для текста (элементы управления «редактирование + памятка») они использовали поля «Предыдущее» и «Текущее значение» в объекте сувенира. Он еще не работает, поэтому его нужно доработать. - person Warren P; 08.08.2010

Я бы, вероятно, основывал это на ClientDataSet: у него есть возможности отмены (и, если я правильно помню, с ним также довольно легко реализовать повтор).

Бонус: вы можете использовать элементы управления с учетом данных.

У меня такое ощущение, что вы ищете какое-то поведение, подобное ORM.
На DelphiLive я буду говорить о создании своего рода уровня ORM, основанного на ClientDataSets; они довольно крутые.

--jeroen

person Jeroen Wiert Pluimers    schedule 06.08.2010
comment
Я думал о виртуальных элементах управления (но где вы найдете виртуальное поле со списком, виртуальный редактор и т. д.). - person Warren P; 06.08.2010
comment
Мне нравится твоя идея. Конечно, мне не повезло с наборами данных. - person Warren P; 07.10.2010