Экран ввода данных обновляет объекты модели в режиме реального времени, предоставляет возможность отмены и повтора, оперативные обновления объекта модели с использованием шаблона команды - PullRequest
2 голосов
/ 06 августа 2010

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 07 августа 2010

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

  • Модель-GUI-Mediator - синхронизация между объектной моделью и управлением графическим интерфейсом, поэтому вы не ограничены элементами управления TDataset и DB-Aware.Вы можете создавать объектно-ориентированные элементы управления из КАЖДОГО элемента управления VCL.
  • Команда - ваши ДЕЙСТВИЯ на модели объектов.Должны быть запущены контроллерами.
  • Памятка - сохранение внутреннего состояния объектов данных для реализации поведения Undo / ReDo

КАК МОЖНО СКОРЕЕ Я опубликую простой пример в моем блоге www.danieleteti.it

0 голосов
/ 06 августа 2010

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

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

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

- Джероен

...