Recentemente, decidi começar a aprender o desenvolvimento do iOS e, para esse fim, tenho lido a programação do iOS: o guia Big Nerd Ranch . No livro, os autores descrevem um padrão de design MVCS - Model-View-Controller-Store , uma vez que muitos aplicativos fazem uso de várias fontes externas de dados, mantendo a lógica de solicitação no controlador, pode ficar muito confuso. proponha que mova toda a lógica de solicitação para fora do controlador e para um objeto separado.
Em suma, para citar o livro
Model-View-Controller-Store coloca a lógica da solicitação em um objeto separado, e chamamos esse objeto de loja (Figura 28.4). O uso de um objeto de armazenamento minimiza o código redundante e simplifica o código que busca e salva dados. Mais importante, ele move a lógica para lidar com uma fonte externa em uma classe organizada, com um objetivo claro e focado. Isso facilita a compreensão do código, o que facilita a manutenção e a depuração, além de compartilhar com outros programadores em sua equipe.
E
O interessante dos armazenamentos assíncronos é que, embora muitos objetos estejam trabalhando muito para processar uma solicitação, o fluxo da solicitação e sua resposta estão em um local no controlador. Isso nos oferece o benefício de código fácil de ler e de modificar.
Eu queria descobrir mais sobre esse padrão e ver o que os outros poderiam ter a dizer sobre ele, mas, ao pesquisar on-line, as únicas referências que pude encontrar foram para o mesmo livro (o padrão talvez seja conhecido por outro nome?).
Para mim, a lógica do autor parece fazer sentido, e parece uma extensão lógica do padrão MVC normal, mas talvez seja porque eu realmente não tenha muita experiência com o padrão MVC na prática (além da incursão no desenvolvimento do iOS, eu tenho tipo de MVV usado com backbone.js (ou seja, se você considerar o MVC )).
Eu esperava que talvez alguém com mais experiência pudesse esclarecer se existem falhas / problemas óbvios no padrão MVCS que estou perdendo.
fonte
Respostas:
"Store", no caso dos padrões de design do MVCS, tende a se inclinar para a lógica de armazenamento. No caso do iOS, isso geralmente é uma implementação de dados principais. Se você criar um modelo com suporte para Dados Principais no Xcode, verá o aspecto "Loja" desse padrão de design escondido na classe AppDelegate.
Para levar isso para o próximo nível, frequentemente criarei uma classe de gerenciador singleton que lida com a configuração da pilha de dados principais e lida com todas as buscas / salvamentos envolvidos na pilha. Como diz a citação mencionada, isso torna muito fácil não apenas chamar esses métodos, mas ajustá-los, se necessário, em vez de ter chamadas de salvamento / busca em todo o lugar em diferentes controladores de exibição.
O paradigma "Store" não é restrito ao Core Data, no entanto. Sua loja pode ser apenas um serviço da web. Talvez você tenha uma classe que interaja com o Facebook, Twitter, Yelp ou alguma outra API baseada em REST. Descobri (e de forma semelhante acompanho a tendência) que esses tipos de classes também têm o nome de Gerente. Eles estão literalmente gerenciando todos os detalhes internos para que suas outras classes possam inserir ou obter exatamente o que precisam.
No que diz respeito a falhas óbvias ou problemas com esse padrão de design ... Como em qualquer padrão de design, o problema mais evidente é garantir que você configure seu projeto de maneira que condiz com o paradigma. Especialmente com um padrão de design novo para você, essa pode ser a parte mais difícil. O benefício de dividir sua lógica "Store" em sua própria classe é o fato de tornar a manutenção do código muito mais fácil.
fonte
'Armazenar' nesse contexto parece muito com um Repositório ou Serviço . Nesse caso, esse é um padrão extremamente comum. As falhas / problemas variam de acordo com a sua implementação e o domínio do problema.
Em geral, parece que o livro está usando 'Store' para representar um nível de lógica de negócios + um nível de lógica de recuperação de dados que lida com um conjunto de dados que podem ou não fazer parte do seu aplicativo.
Por exemplo, agrupar a API do Twitter em uma 'Loja' é uma boa maneira de compartimentar essa lógica.
Pensando melhor
Usando esta definição de MVC (que eu acho bastante interessante), o 'Store' é realmente um subconjunto do modelo. A definição entre se é uma extensão do MVC ou se é um padrão de recuperação de dados não é muito útil. Eles acabam parecendo o mesmo código.
Resumindo, acho que você vai ficar bem seguindo os conselhos que eles sugerem (parece bem geral).
fonte