laravelbrasil / forum

Ama Laravel? Torne se um Jedi e Ajude outros Padawans
GNU General Public License v3.0
252 stars 13 forks source link

Dividindo os arquivos por módulos.. #114

Closed ronicec closed 7 years ago

ronicec commented 7 years ago

Olá meus amigos tudo bem?

Peço a ajuda de vocês novamente em um assunto que acredito que seja algo muito simples, porém estou tendo dificuldades...

Vamos lá... Criei um novo projeto do laravel, até aqui está tudo certo, porém percebi que tudo que for criando de Model fica na pasta raíz e tudo que é controller vai ficando no http/controller.

A minha pergunta é, preciso dividir isso por modulos, em outras palavras preciso separar o meu sistema todo da seguinte maneira:

Modules/ --> Site/ --> Painel_Admin/ --> Gestao_Clientes/ -> Dentro desse modulo vou ter mais modulos, exemplo Financeiro, Estoque, e outros.

Atualmente é algo disso que preciso.. estive fazendo pesquisas porém não consegui encontrar algo mais 'didático', alguém poderia me dar uma luz nesse túnel escuro?

Obrigadooo!!!

brunomdev commented 7 years ago

Olá amigo, tente dar uma olhada nesse pacote https://github.com/caffeinated/modules

ronicec commented 7 years ago

Bruno, matou a pau! O negócio é do jeito que preciso!!!

Outra dúvida, @brunomdev se você puder me guiar também, estive pensando conforme o meu sistema crescer vou ter N rotas, a dúvida é, preciso ter milhões de rotas mesmo? consigo fazer algo mais simplificado, não sei o que poderia ser? Estou viajando na maionese?

Agradeço pela ajuda anterior já!

brunomdev commented 7 years ago

Qual versão do Laravel está utilizando?

ronicec commented 7 years ago

Estou usando a última versão. Criei o projeto ontem.

brunomdev commented 7 years ago

Até a versão 5.1 do laravel existia uma funcionalidade chamada Implicit Controllers (https://laravel.com/docs/5.1/controllers#implicit-controllers), mas a mesma foi depreciada a partir da versão 5.2.

Eu não testei, mas existe essa solução https://github.com/lesichkovm/laravel-advanced-route. Você poderia achar uma outra solução semelhante ao que mostrei acima ou criar uma própria.

Recomendo que leia a seguinte discussão (https://laracasts.com/discuss/channels/laravel/implicit-controllers-laravel-54).

De qualquer forma o mais recomendado é especificar cada uma das rotas mesmo.

paulofreitas commented 7 years ago

A minha pergunta é, preciso dividir isso por modulos, em outras palavras preciso separar o meu sistema todo da seguinte maneira: [...]

Simplesmente separe os namespaces por domínio. A idéia de modularização se baseia basicamente na organização orientada ao domínio. É assim que arquiteturas como o Domain-Driven Design (DDD) e Hexagonal Architecture funcionam.

Todas as classes, todas elas, podem ser armazenadas onde você quiser. O skeleton padrão do Laravel de usar o namespace App\{model} para os models e App\Http\Controllers\{controller} para os controllers é apenas uma sugestão, você não é obrigado a seguir isso. Tudo pode ser separado, até mesmo rotas, e você não precisa de pacotes de terceiros para fazer isso. Pacotes de modularização vão te obrigar a seguir uma estrutura particular, sem pacotes você quem define a estrutura. E é tão simples quanto depender de pacotes de terceiros. 😀

Nada te impede de fazer algo assim e repetir isso em todos os outros módulos:

O limite é a tua imaginação. Note, você pode ter um EventServiceProvider e RouteServiceProvider por módulo (ou qualquer outro service provider), você não é obrigado a centralizar o registro de eventos/rotas/qualquer coisa em uma única classe na aplicação. A idéia da modularização é justamente essa, atingir alta coesão e baixo acoplamento em isolar e agrupar classes em módulos - e quanto mais você se orientar aos conceitos de domínio ao invés dos conceitos de arquitetura, maiores as chances de você alcançar isso.

Esse exemplo acima é basicamente um HMVC, um MVC modular. Em arquiteturas como o DDD e Hexagonal você vai bem mais além, podendo até mesmo desacoplar a aplicação do framework de modo que ela se torne agnóstica. Você provavelmente não precisa de nada além do HMVC, mas compreender as demais arquiteturas e os benefícios que elas proporcionam é uma excelente maneira para se aprender a melhor estruturar projetos independente da arquitetura utilizada. Quando houver tempo, procure se aprofundar nessa área de arquitetura de software - você não irá se arrepender.

Sobre as rotas, se você seguir o padrão RESTful você não precisa criar milhões delas, basta fazer uso das Resource Routes - se você seguir esse padrão, você vai simplificar bastante a quantidade de rotas declaradas.

Enfim, não existem limites para estruturar as aplicações e muitas vezes você não precisa de pacotes de terceiros para fazer o que quer, o framework já é flexível o bastante para ser customizado. 😄

ronicec commented 7 years ago

Obrigado pela explicação Paulo!!!!! Estarei dando uma estudada no que você colocou por aqui!!! Agradeço novamente a sua ajuda.

Marasca commented 7 years ago

Só passando para agradecer também. Estava com a mesma dúvida hoje e antes que o projeto evolua muito já vou dar de ajustar para o formato HMVC.