quadro Laravel de projetos de grande escala
Apenas um projeto MVC não é suficiente, precisamos de uma estrutura mais completa do projeto
- Controlador muito inchado
- Modelo muito inchado
- Médias e grandes projetos de infraestrutura
- O teste de unidade
- Conclusão
Para os iniciantes a aprender divisão Laravel dois, um é um programa agradável irá preencher a arquitetura MVC, resultando em controlador e modelo de hipertrofia aberrante, como o futuro é difícil de manter, um muitas vezes não é consciente do programa em que uma reescrita classe hesite indecisos, afinal, é uma página PHP tradicional de um arquivo. Este artigo em resolver o mais adequado para o projeto de infra-estrutura de grande escala Laravel, e ambos fácil de manter , fácil de expandir e fácil de re-uso das funções e fácil de teste .
Controlador muito inchado
RoR é afetado, os novatos muitas vezes pensam MVC arquitetura é model
, view
, controller
:
- Modelo é o repositório.
- Controlador responsável por interagir com HTTP, chame o modelo e vista.
- Ver é HTML.
Se de acordo com esta definição, as seguintes necessidades de reescrever Onde ele está?
- Enviar E-mail, usando a API externa.
- Usar a lógica escrito em PHP.
- O formato de exibição sob demanda para a conversão.
- Se deseja exibir determinadas informações sob demanda.
- Exibir informações diferentes sobre a demanda.
Onde 1, 2 é uma lógica comercial, 3, 4, 5 pertencente à lógica de exibição, se de acordo com a definição geral da MVC, o modelo é um banco de dados, ea vista é HTML, esses requisitos não podem ser escritas no modelo e vista, só pode mal escrever controlador.
Portanto, um grande número de programas escritos para iniciantes vai começar no controlador, as causas do controlador hipertrofia difícil de manter.
Modelo muito inchado
Como a lógica escrito no controlador não é manutenção conveniente, então eu teria escrito no modelo lógico como?
Quando você move o modelo lógico do controlador, embora a tabela de controlador de fina, mas o modelo de gordura, a partir do modelo original representa o banco de dados tornou-se agora também responsável pela lógica de negócio e lógica de exibição, o resultado foi ainda pior.
Modelo representa o banco de dados? Pense nisso como um Eloquent class
bom, banco de dados lógico no repositório deve ser escrito em, razão pela qual Laravel 5 não tem models目录
, classe Eloquent só é colocado app
em apenas o diretório raiz.
Médias e grandes projetos de infraestrutura
Essa mudança como nós escrevê-lo? Não confinar o nosso pensamento no MVC:
- Modelo : assim como classe eloquente.
- Repository : Modelo auxiliar, banco de dados lógica de processamento, e depois injetado no serviço.
- -Serviço : Auxiliar Controller, lógica de negócios e, em seguida, injetada no controlador.
- O Controlador : receber uma solicitação HTTP, chamar outro serviço.
- Apresentador : processamento lógica de exibição, e, em seguida, verteu-se em vista.
- Ver : Use lâmina para vincular dados para HTML.
Onde o azul é o MVC original, e roxo é o foco deste artigo para introduzir: Repository modo, Serviço de modo e Apresentador modo.
A seta indica o objecto de injecção dependência direcção. 11 na injeção de dependência, consulte o detalhado injeção de dependência discussões aprofundadas
Ainda podemos encontrar arquitetura MVC, devido SOLID a responsabilidade único princípio e de inversão de dependência princípio:
- Vamos ser separado do modelo lógico banco de dados, assistida pelo modelo de repositório, a injeção modelo de dependência no repositório.
- Vamos separar do controlador de lógica de negócios, assistida pelo controlador de serviço, a injeção de dependência serviço no controlador.
- Vamos mostrar a lógica de fora da vista, a vista auxiliar pelo apresentador, a injeção apresentador dependência em vista.
Crie um diretório
No app
diretório de construção Repositories
, Services
e Presenters
diretórios.
Não tenha medo de criar o diretório! !
Não tenha medo de estabelecer um diretório diferente do padrão Laravel outro diretório , de acordo com SOLID 's responsabilidade único princípio, mais a função de classe, a mais responsabilidade e, portanto, viola a responsabilidade único princípio, então você deve dividir seu programa em pequenas porções cada parte tem sua própria função, não uma característica de classe colinas pacote mar, a chamada categoria universal , todo o projeto não deve apenas três partes MVC, deixar ir e construir o diretório apropriado de acordo com suas necessidades, e classe adequada para o diretório, desde que temos namespace da classe classificação pode nos ajudar.
Repositório
Devido ao espaço limitado, o repositório em uma discussão em separado artigo especial, consulte como usar o repositório padrão?
Serviço
Devido ao espaço limitado, o serviço em uma discussão em separado artigo especial, consulte How to Use o modo de serviço?
Apresentador
Devido ao espaço limitado, o apresentador em uma discussão em separado artigo especial, consulte como usar o modo Apresentador?
O teste de unidade
Agora que a injecção dependência modelo, vista, dependências de objetos controlador ter sido desmontado, também são utilizadas, de modo a que cada parte pode ser individualmente a unidade de teste, para testar tal serviço, será o repositório simulada, ou outro serviço pode ser zombar.
Apresentador pode ser um separado teste unidade, o outro para ser mock-Service, o teste de aceitação não é necessariamente executar, a fim de testar a lógica de exibição.
Conclusão
-
Este artigo falou sobre arquitetura é apenas o começo, você pode adicionar mais diretórios de acordo com as reais necessidades da classe, se você achar que seu MVC violar SOLID em princípios, corajosamente MVC além da reconstrução da classe, em seguida, de acordo com os seguintes métodos:
- Criar uma nova classe ou interface.
- A injecção dependência objeto de dependência a classe.
- Lidar com suas responsabilidades na classe.
- O controlador de classe ou de interface ou injectado em vista.
-
Finalmente, com o teste de unidade, a arquitetura reconfigurável teste é o mesmo que os resultados demanda original.