Pergunta

Digamos que eu tenha uma visão, myview, um controlador de exibição, myViewController e algum tipo de objeto modelo, mymodel. Além disso, digamos que o modelo tenha duas propriedades compatíveis com KVO, arrayOfPeopleNames e arrayOfAnimalKinds (ambos nsstrings).

Na minha opinião, quero ter dois pop-ups ligados ao conteúdo dessas duas matrizes.

Minha pergunta é: se o MyController tem uma referência ao MyModel, e o menu suspenso está vinculado ao myViewController, é uma boa prática definir um teclado ao longo das linhas de myModel.arrayOfPeopleNames?

Ou preciso configurar um nsarray adicional no MyViewController, que reflete o de Mymodel e se vincula a esse Keypath?

O primeiro parece muito mais simples do ponto de vista da implementação (não preciso fazer a matriz do controlador espelhar a matriz do modelo), mas estou me perguntando se expõe o modelo para muito à vista.

Opiniões?

Foi útil?

Solução

Você não deve refletir a matriz do modelo no controlador. Embora eu não esteja muito preocupado em ligar diretamente à matriz do modelo em um caso muito simples, você também pode vincular seus objetos de interface do usuário a um NSArrayController, que gerencia a matriz do modelo. Isso forneceria separação entre o modelo e a interface do usuário e, mais importante, lidaria com tarefas como classificação, seleção, adição e remoção de objetos e assim por diante.

Eu posso ver de onde você vem ao estar preocupado com o KVO e as ligações violam o design do controlador "puro", mas não é algo com o qual você deve se preocupar. Embora as notificações KVO passem diretamente para a exibição do modelo, configurar e alterar a conexão entre a visualização e o modelo ainda é de responsabilidade do controlador (apenas neste caso, isso é feito através do IB). Por exemplo, você não deseja que um objeto modelo obtenha uma referência à exibição e se vincule à UI, essa seria a responsabilidade do controlador.

Como outro exemplo de algo a evitar, considere se seu modelo tinha uma variedade de "IDs de animais" em vez de nomes. Em vez de criar um método para traduzir IDs de animais em nomes de animais legíveis humanos no modelo, você pode criar um transformador de valor ou formatador para fazer a conversão. Isso permite que você mantenha esse nível de separação entre o modelo e a visualização.

Lembre -se também de que o objetivo dos padrões de design é reduzir a complexidade de codificar uma solução para um problema, nunca mais aumentá -lo. Você verá que é exatamente assim que o cacau funciona, mesmo que nem sempre siga a definição mais rigorosa de um padrão.

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