Arquitetura de Sofware - Divisão de pastas
Oi gente, depois de tirar um bom tempo de estudo sobre o assunto, eu cheguei em algumas conclusões que me ajudaram a organizar o meu código do hub de jogos. Não sei se estão completamente corretas, tá?
Esse vídeo aqui me ajudou bastante a entender um pouco para que serve essa divisão, a nomenclatura de cada pasta, etc. E eles falam principalmente dois padrões mais utilizados de Arquitetura de Software:
Model-View-Controller (MVC)
Um dos padrões mais utilizados e simples. As vezes ocorre muitos arquivos dentro de uma pasta e regras de negócio dentro do controller ou da própria view.
- Model: contem e trabalha com os dados da aplicação, é onde as regras do negócio são aplicadas
- View: parte que exibe estes dados para o cliente, e permite que o mesmo interaja com a aplicação
- Controller: é quem intermedia os dois anteriores, faz o controle das informações que transitam entre eles, valida dados, conecta regras de negócios com consultas nos bancos de dados, etc.
Arquitetura em Camadas
Não existe número máximo de camadas a serem utilizadas, então é necessário cuidar para não se usar muitas camadas para não engessar o fluxo da requisição; além disso, a separação de responsabilidade entre as camadas precisa ser clara e bem documentada, para ficar mais fácil desenvolver e manter os módulos de forma independente.
- Controller: responsável por gerenciar as requisições e respostas do fluxo.
- Service: responsável por toda a regra do negócio.
- Respository: responsável pelas operações com o banco de dados.
- Entity: representação da entidade, tabela do banco de dados dentro da aplicação.
Com tudo isso, cheguei a conclusão e usarei no meu hub:
- View: oq exibe os dados para o usuário, que interage com ele - hub?
- Repository: vai ficar o arquivo json.
- Service ou Model: ficam e são aplicadas as regras do negócio - jogo em si.
- Entities: objetos do negócio - tabuleiros, jogadores...
Não entendi ainda muito bem a aplicação ou oq vai no Controller. Quem tiver infos para agregar, por favor, manda aí <3
Larissa Leal @LariLealEu sempre fico meio confusa com o entities e o model, para mim quase parecem sinônimos.
Andei pesquisando sobre a diferença de repository e service, pq elas também me pareciam sinônimos: Dependendo do modelo que vc segue de arquitetura, o repository fica dentro do service, isso acontece quando segue o padrão MVC. Porém, seguindo o padrão DDD(Domain Driven Design) a pasta repository pode ficar fora de service. Vai depender do padrão de arquitetura que optar seguir. E a maior diferença entre elas é essa responsabilidade que vc citou da repository " responsável pelas operações com o banco de dados." ou seja, gerenciar o acesso de dados da sua aplicação. Enquanto o service é mais responsável pelas regras de negocio.
Em resposta acarolinacastilhos⬆:Larissa Leal @LariLealDo pouco que sei, o controller do MVC é mais focado em req-res(requisições e respostas) para quando se utiliza rotas de APIs.
Sabe quando a gente digita na barra de pesquisa de um navegador a URL de um site? Basicamente isso é fazer uma req de uma rota e a resposta seria a pagina que foi pesquisada funcionando certinho. As vezes as resposta pode ser aquele famoso "error 404 not found". Acho que vamos ver isso mais para frente. Alguém me corrige se eu falar bobeira
Carolina Castilhos @carolinacastilhosaaaaaaaaaaaah, perfeitooooo Lari!! Faz sentido, pelo que li acho que é isso aí mesmo. Só não entendo completamente por que me falta o conhecimento do resto desse fluxo ainda. Mas to começando a pegar o caminho hahahaha
Em resposta acarolinacastilhos⬆:Gabriele Martins Pereira @gabi.mpPost sensacional amiga! Parabéns! Muito bom! Bom, sobre o Controller eu acabo usando como um intermediador entre Services/Model e Repository. Por exemplo, no hub, minha camada Repository contém apenas uma pasta Data, onde ficam os arquivos JSON, e a classe PlayerRepository que é responsável apenas por conter o caminho do arquivo JSON e métodos para serializar e desserializar. Ja a classe PlayerController fica responsável por ter uma lista dos objetos Player e métodos como Adicionar, Remover e Atualizar jogadores. Não sei se essa seria a forma correta de se usar o Controller, porém estou fazendo assim! Espero ter ajudado! :)
Em resposta acarolinacastilhos⬆:Mauricio Santana @mauriciosmUsei mvc por conta de ser poucos arquivos, mas existe outros melhores
Em resposta acarolinacastilhos⬆:Jackson @JacksonMuito bom esclarecedor também tinha essas dúvidas...
Parabens!!!!