Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Como adaptar padroes de projeto e estilo SOLID no dev PHP usando CodeIgniter

Ola galera, a seguinte questão é mais uma dúvida de uso e não de código. Fiz toda a formação php aqui na Alura, incluindo Design Patterns e SOLD. Comecei desenvolver código e para aumentar a produtividade decidi estudar um FrameWork escolhi CodeIgniter desmanchei ele de cima para baixo, incluso adaptando o CORE. A duvida: pese a que ajuda muito no desenvolvimento, esta organização de código como tem aderência com as boas praticas e SOLID, se acoplar a elementos estaveis como interfaces (as quais no framework tem que criar pois nem vem pre-setadas), clases pequenas, sistemas que consigam se expandir com muitas clases e muito pequenas favorecendo a manutencao. O que vi até agora ~e que nos proprios manuais do Framework e ate no curso da Alura ~e levado adiante como pratica colocar tudo o vinculado a um topico dentro de cada controller. conclusao, controllers enormes. Exemplo, Sistema de Chamados. Tudo o referente a logica do chamado fica dentro do controller chamado enchendo de funcoes. Na pratica de patterns, usavamos uma clase para cada estado, o padrão state, clase isolada para conexao, etc. O CodeIgniter parece abusar tbm de singleton, usa variaveis de clase d mais... Fico realmente confuso

3 respostas

Oi Gustavo, tudo bom?

Realmente o CodeIgniter tem alguns detalhes na implementação. Um Framework que eu acho bem legal para referencia de boas práticas é o Symfony. Ele vem sendo muito bem mantido pela equipe, seguindo varios design patterns e boas práticas.

Quem desenvolve os frameworks também são desenvolvedores e muitas vezes vamos encontrar códigos que não são a melhor implementação possível naquele contexto mesmo, é normal =)

Em relação aos controllers muito grandes. Realmente é normal com o crescimento do sistema algumas classes ganharem muita responsabilidade. Cabe a gente sempre estar de olho nesse crescimento e tentar quebrar elas em classes menores e mais semanticas. Tenho certeza que no sistema de chamado, conforme o controller Chamados cresce, conseguimos quebrar ele em outros controllers menores como ChamadosAbertosController, ChamadosResolvidosController, ChamadosEmEsperaController e assim por diante.

A parte mais dificil do desenvolvimento Orientado a Objetos é encontrar esses pontos de quebra, quando devemos criar uma classe nova, quando devemos juntar duas classes. Esse tipo de trabalho é constante mesmo, sempre olhando para o código e vendo como podemos torná-lo mais facil de manter =)

Salve André, Sim realmente depois deste tempo todo a imagem que tenho do CI é exactamente esta. Pena que ja extendi ate os helpers e criei novas bibliotecas e preparei o Environment ja pensando em ele como ferramenta. Igual não posso negar que comparado com desenvolver de 0 é uma mão na roda. Referente aos controller sim, realmente tem vários quebrando as tarefas nessa mesma linha, mas fiquei curioso em conhecer melhor o Symfony. Aqui na plataforma ninguem se interessou por desenvolver um curso dedicado a ele, escolhi o CI por causa da grande popularidade. Você que ja trabalha em este segmento qual prefere para levantar um projeto em PHP?

solução!

Trabalhei com PHP em alguns projetos grandes, do zero e tal. O CodeIgniter não é um framework que suporta muito bem a orientação a objetos. O ORM dele é meio fraco também.

Trabalhei com o symfony por um tempo e eles utilizam o conceito de modularização para as dependencias do framework. O ORM que eles utilizam é o doctrine mas na implementação isso está bem desacoplado, mudar isso num futuro não seria nada custoso para a ferramenta e tal.

O único ponto que eu acho meio chato é a parte de geração de formulários no back-end. Todo form no symfony é recomendavel criar uma classe que extende de FormType e no front utilizar apenas os helpers. Mas, no dia-a-dia o front dos forms acaba sendo muito dinamico pra esse tipo de estrutura o que faz a gente ter que ir atrás de templates pra formulários no twig.

A ferramenta no geral da bastante suporte e a documentação é estupidamente boa, com muitos exemplos de uso e tal.

Uma outra que eu recomendo bastante é o laravel (que por baixo dos panos usa o symfony também) pois ele também é bem implementando e suporta a maioria das funcionalidades que a gente precisa no dia-a-dia, além de ser o framework mais comum no mercado PHP.

Acredito que para projetos pessoais o symfony é uma boa abordagem, é um framework que vem ganhando espaço no mercado por ser um projeto mantido com investimento não só mais um projeto open-source.

Para fins de curriculum acho que o Laravel pesa um pouco mais ainda, mas conhecer os dois nunca é demais tanto porque o Laravel utiliza os symfony por baixo dos panos, isso te da mais dominio no framework.

Para fins práticos os dois não estão muito distantes e abrangem bem as necessidades diarias de um projeto web =)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software