A tela de entrada de dados atualiza os objetos de modelo em tempo real, fornecem e refazer, atualizações ao vivo para um objeto modelo usando o padrão de comando
-
26-09-2019 - |
Pergunta
O bem conhecido padrão de comando é usado com frequência quando você deseja implementar um modelo com recursos de desfazer/refazer. Estou procurando uma implementação de referência (exemplo) de um formulário Delphi simples que implementa o desfazer/refazer.
Pelo que vi, simples formulários de entrada de dados Delphi com três caixas de edição, seis caixas de memorando e algumas caixas combinadas e outros controles de edição simples, normalmente não suportam desfazer/refazer.
Alguém já viu uma abordagem Delphi bem projetada para o suporte a desfazer/refazer em vários níveis para um design complexo do controlador de visualização modelo usando uma visualização Delphi separada (formulário) e objetos de modelo (os objetos de dados são atualizados de forma síncrona com todas as edições para o formulário, e a lógica de validação e controle não está incorporada no formulário ou no modelo, mas separada.
Parece-me que, se você não tivesse que usar o MVC, e precisava simplesmente prototipar um aplicativo de demonstração Delphi que não possuía objetos de modelo ou controlador, que desfazer/refazer de um puro delphi simples "um formulário é meu -App "seria mais simples de projetar, mas ficaria mais complicado, pois você precisa gravar e reproduzir objetos e sincronizá -los para formar ações como tedit.onchange.
Solução
Você deve usar padrões de seguidores:
- Modelo-gui-mediador
-Sincronizar entre o modelo de objetos e o controle da GUI, para que você não esteja limitado pelos controles TDataset e DB-ADEE. Você pode criar controles de consciência de objetos a partir de todos os controles VCL. - Comando
-Vocês ações no modelo de objetos. Deve ser demitido por controladores. - Lembrança
-Economia o estado interno dos objetos de dados para implementar o comportamento de desfazer/refazer
O mais rápido possível postar um exemplo simples no meu blog www.danieleteti.it
Outras dicas
Eu provavelmente basearia isso em um clientDataSet: que possui recursos de desfazer (e, se bem me lembro, é muito fácil implementar o refazer também).
Bônus: você pode usar controles conscientes dos dados.
Tenho a sensação de que você está procurando algum tipo de comportamento do tipo ORM.
Na Delphilive, falarei sobre fazer uma espécie de camada ORM com base nos dados do cliente; Eles são bem legais.
--Jeroen