Pergunta

Estou trabalhando em uma GUI MVC/MVP para editar um documento. O documento tem uma estrutura de árvore, com alguns nós representando texto, outras imagens. O modelo de aplicativo também inclui uma pilha de comando, com comandos operando diretamente no modelo.

Como os nós diferentes têm controles radicalmente diferentes, estou planejando implementar tríades individuais de MVC/MVP para cada nó. Onde estou tendo problemas é como sincronizar a criação e a destruição dos componentes pares V e C.

Minhas ideias:
- Ouça em cada nó para eventos do tipo "infantil" e depois crie colegas com base nesses eventos
- Use uma fábrica para criar nós no modelo e faça com que essa fábrica também crie os colegas

Quais são alguns padrões comuns ou práticas recomendadas para geração dinâmica de visualização/controlador?

Foi útil?

Solução

Eu recomendo olhar para alguns dos padrões da interface do usuário nisso local

Quanto à sua pergunta específica, eu faria o seguinte

O formulário que exibe os nós implementaria uma interface inodeview

Um método da interface inodeTreeform seria a capacidade de adicionar um nó individual. Seria passar uma classe de nó criada no objeto NodeTreeCreen. Haverá duas propriedades principais. A primeira é a chave do nó e a segunda é o tipo de nó.

Você adicionaria o nó de tal maneira que existe um campo no controle que possui a chave.

Juntamente com a interface inodeTreeform, você teria uma interface inodeview. Isso cobriria a área de vista ou o novo formulário que você também mudará.

Quando você clica no nó, ele passa a chave para a tela de nodetrete, que tende a olhar para que tipo de nó é. Possui uma coleção de objetos inodeview. Uma das propriedades do inodeview será qual tipo de nó é.

Você recupera a visualização certa. Você fecha o INODEVIEW atual, define o INODEVIEW atual para o que você recuperou, passa pelo nó e diz que ele se exibe.

Você tem uma escolha sobre o que o INODEVIEW vai falar. Você pode ter um formulário/controle registrado para cada um dos tipos diferentes. Por exemplo, um INODEVIEWTEXT, INODEViewImage, etc. ou apenas um omnibus INODEViewForm e deixe o objeto que implementa o INODEView cuidar do desenho real.

Dependendo do seu kit de ferramentas da GUI, isso pode significar que um formulário pode estar implementando muitas interfaces diferentes.

Quanto à adição, exclusão e criação de nós, isso seria feito através da interação entre o formulário que implementa o InodetReeform e o NodeTreeCreen. Entre as coisas que isso estará fazendo está executando os comandos que você já criou para modificar o modelo.

Ao implementar tudo por trás de uma interface, você pode alterar a implementação sem estragar o restante do software. O objeto que implementa as diferentes interfaces pode mudar sem afetar os outros objetos, desde que continuem a implementar as interfaces corretamente.

Esta é uma variante da vista passiva no site de Martin Fowler.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top