padrões de projeto para quadros de cacau da Apple: MVC, MVP, Passive View ... Onde está a Apple indo?

votos
12

Para lançar as bases para esta pergunta, eu vou dizer que eu estou começando minhas definições para MVC, MVP, e Vista passiva a partir do seguinte:

Model View Controller (MVC)
Model View Presenter (MVP)
Passive View (PV)

A Apple sempre declarou que utiliza o padrão de projeto MVC, mas eu notei no OS X 10.5 chegamos NSViewController, KVO, ligações, etc., objetos que parecem se comportar mais como o padrão de exibição de design passivo. É aqui que a Apple quer que vá? Eu quero planejar meu código de uma maneira que desempenha tão bem quanto possível com os padrões de design escolhidos da Apple, que é por isso que eu quero saber onde a Apple está indo. Alguém tem uma pista?

Publicado 09/12/2008 em 18:57
fonte usuário
Em outras línguas...                            


6 respostas

votos
7

Qualquer código de qualquer complexidade tem muitos lugares onde diferentes padrões podem ser aplicadas. MVC é proeminente nos documentos de cacau porque explica as relações entre seu código funcional (o modelo), seu código UI ou desenho IB (a vista), e os serviços de cacau que os unem (o controlador). Isso vale ênfase, particularmente no dox introdutório, porque você precisa de um pouco de "toque de despertar" para parar de pensar que você tem que escrever tudo sozinho, e começar a pensar sobre como projetar suas peças únicas, e confiar a estrutura para fazer o seu trabalho de canalização.

As definições variantes de MVC são lendários, e é importante ressaltar que MVC não é descrito no livro canônico "Gang of Four", "Design Patterns". É também interessante que admitir que o modelo "MVC" do cacau não é o mesmo que o SmallTalk 80 MVC (que é onde a terminologia originada).

É provavelmente também de salientar que "GoF" na verdade usa a palavra "padrão" para denotar um estilo particular de documentação, e não a forma abstrata de projetar o código que o padrão descreve. É muito ruim que esse uso em grande parte foi perdida. Se todos nós entendemos a palavra dessa maneira, então eu poderia dizer "que seria muito útil se alguém iria realmente escrever-se um padrão para MVC do Cacau". Então, não seria tudo tão confuso!

Respondeu 10/12/2008 em 19:22
fonte usuário

votos
4

Cacau é baseado em MVC (como a Apple define ), e tem sido sempre uma tendência de fazer mais e mais para você. Aqui está como ele é atualmente.

  • Ver camada: NSView, NSWindow, NSCell, suas subclasses, e CALayer
  • camada controlador (desde 10,3): NSController e subclasses (predominantemente NSArrayController)
  • camada de modelo: Tradicionalmente, você tinha que fazer isso inteiramente a si mesmo, mas desde 10.4, você pode ser capaz de usar Core Data.

Ligações são alimentados por KVO (e KVC), e são a cola que ligam as três camadas em conjunto. Você vincular as vistas para os controladores e os controladores para o modelo.

Respondeu 09/12/2008 em 23:41
fonte usuário

votos
3

Eu não diria Cacau segue o padrão vista passivo, como é descrito lá. Ele está dizendo que o controlador faz todo o trabalho na preparação da vista e envio de notificações de alteração. Em Cocoa um objeto de exibição normalmente responder às notificações KVO (através de ligações) a partir do modelo, atualizar dados do controlador que ele é obrigado a, prepará-lo através de formatadores de dados ou transformadores de valor e, finalmente exibi-lo na tela.

Cacau segue MVC muito bem, embora normalmente o aspecto 'controller' é dividido em controladores de vista e os controladores de modelo. Você pode ler mais sobre isso aqui . Se você tiver quaisquer exemplos específicos sobre onde você está confuso, talvez eu possa fornecer mais detalhes sobre a forma de cacau faz as coisas.

Do mesmo guia, esta seção explica alguns padrões de design adicionais que você pode achar útil. Na minha própria experiência que, depois de trabalhar através de alguns projetos MVC em Cocoa tende a vir muito naturalmente, eu não estaria muito preocupado com isso.

Respondeu 09/12/2008 em 19:13
fonte usuário

votos
2

Os docs Apple realmente explicar MVC melhor do que qualquer outra coisa que eu li. Basicamente, a confusão relacionada com MVC é porque ele é um padrão composto. Ele consiste de muitos padrões básicos. Embora MVC não foi discutido em Design Pattern pelo Gang of Four , os padrões básicos foram.

A principal diferença que eu acho é que, no mundo Apple O controlador é um Mediator para além do que é normalmente.

Assim, ao contrário dos modelos de abordagem tradicionais no mundo da Apple não notificar vistas de mudança. Eles não avisar ninguém, na verdade. Se você quiser alterar um modelo que você tem de fazê-lo através do controlador para se certificar de todos é notificado das alterações.

Penso que esta abordagem é muito melhor do que o tradicional. Ele não coloca restrições sobre os objetos do modelo. Eles não têm para implementar qualquer interface específica. Eles só têm de resolver problemas específicos de domínio. Assim, você pode muito facilmente reutilizá-los em outras aplicações.

É principalmente os objetos de controlador que têm de ser reescrito nesta abordagem. É claro que a Apple mudou isso com ligações. Mas se você não usar ligações então Controladores é aplicação específica.

Usando a Apple MVC em C ++

Eu realmente seguido de design da Apple ao programar aplicações em C ++ usando Qt. As vistas são QWidget de. Eu coloquei todo o código que tem a ver com a aparência em uma subclasse QWidget. Então eu faço o meu controlador de uma subclasse QObject e tê-lo criar os objetos de exibição e conectar sinais dos QWidgets para ranhuras na minha QObject Controller. Minha classe de modelo é uma classe regular que não herdam nada de Qt e implementar a lógica de negócios. Ele é modificado pelas ranhuras controladores.

Em alternativa, os QWidgets pode ser criado fora do controlador, para que possa reutilizar o controlador para outros tipos de pontos de vista.

Não tenho certeza se isso ajuda qualquer um, mas eu acho que às vezes é mais fácil pensar em padrões de cacau em termos de C ++, porque estamos acostumados a receber padrão explicado em termos de uma linguagem de tipagem estática, como C ++ e Java.

Respondeu 08/03/2009 em 15:29
fonte usuário

votos
2

Eu não acho que Cacau / OpenStep nunca realmente seguido MVC, como é descrito em, por exemplo, SmallTalk 80 . O Controlador SmallTalk é realmente algo que é responsável por interpretar interação do usuário com a vista, que no caso do cacau é tratado por NSControl e, portanto, pela camada View (talvez é decomposto dessa forma dentro do quadro, mas não é suposto espiar dentro, é o que abstração é tudo :-). Em relação a esses links de vocês, a camada Controller em Cocoa realmente cai sob a bandeira Presenter, particularmente quando se considera as diversas NS * classes do controlador de cacau ligações. Aqueles são realmente um serviço de transporte entre a camada de visão e um modelo.

Em minhas próprias aplicações I tendem a ter quatro camadas distintas, mesmo em lugares onde eles não são separados explicitamente; a vista, apresentador, serviço e modelo. Em seguida, os "controladores de apresentador" e os "controladores de serviço" têm propósitos completamente diferentes; a lógica e os processos estão nos serviços, e os casos de fluxo de trabalho e de uso são nos controladores de vista. Em termos de embalagem, se você estiver em que tipo de coisa, os serviços e modelo em conjunto representam um resumo "coisas para fazer em coisas" que pode ser independente do contexto. Os apresentadores e vistas representam a "e é assim que um usuário de um aplicativo Mac OS X gostaria de usá-lo", que é dependente do pacote menor, e encapsula específica AppKit-(e específico-AHIG) aulas e comportamento.

Respondeu 09/12/2008 em 19:37
fonte usuário

votos
1

Uh-oh. MVC = o padrão mais citado erroneamente nunca. Eu li pelo menos 5 diferentes definições do mesmo.

Você pode querer ler este artigo de Martin Fowler

Respondeu 09/12/2008 em 19:46
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more