Fui jogado de cabeça em um novo emprego no desenvolvimento de aplicativos da web em PHP. Não sou novato em PHP, mas não desenvolvi aplicativos de larga escala antes. Estou pensando em como estruturar meu desenvolvimento para evitar problemas futuros. Como faço para projetar e arquitetar meus aplicativos de uma maneira sólida que lhes permita escalar ao longo do tempo em termos de funcionalidade e desempenho. Estou pensando em coisas como:
- Separando o back-end do front-end
- Estruturas de diretório
Gostaria de receber sugestões de padrões, estruturas e métodos de design de arquitetura e aplicativos que me permitam abordar o desenvolvimento de aplicativos Web em larga escala de maneira sustentável.
web-development
design
php
architecture
Brad Morris
fonte
fonte
Respostas:
Um diagrama aproximado da arquitetura do mais recente projeto de larga escala em que estive envolvido.
É apenas um esboço básico, adaptado dos documentos reais da arquitetura e apresentado de uma maneira que se assemelha a uma abordagem típica de n camadas combinada com uma abordagem típica do MVC . Como você pode ver, as camadas lógica e de dados estão conectadas por meio de uma camada de serviço e, mais especificamente, uma API REST , inspirada no Recess , uma estrutura PHP menos conhecida.
Não reinvente a roda
Eu trabalho com três estruturas:
Zend Framework
O gigante das estruturas PHP, com uma base de código impressionantemente bem escrita e uma extensa lista de recursos. Em aplicativos de grande escala, você se encontrará aprimorando a estrutura com mais frequência, e acho a base de código da ZF a mais agradável de se trabalhar. Mas cuidado, não é uma estrutura de nível básico .
Kohana
Kohana começou como um fork do CodeIgniter, e isso foi motivo suficiente para eu não usá-lo, inicialmente. Atualmente, ele cresceu e se transformou em uma estrutura sólida e elegante que se diferencia entre si, seguindo uma abordagem hierárquica de MVC . O HMVC permite uma maior extensão da modularização do que o MVC . Para o projeto no diagrama, adaptei o HMVC do Kohana ao ZF, mas comecei a usar o Kohana para projetos menores e considerando-o como maior também.
CodeIgniter
Só o uso por causa de um projeto herdado que herdei, evite se possível.
Como as outras respostas apontaram, um ORM sempre é útil. Eu uso o Doctrine extensivamente e você deve dar uma olhada em seus novos mapeadores para CouchDB e MongoDB . A escalabilidade é essencial em aplicativos de grande escala e você deve avaliar as soluções NoSQL .
Tudo o que foi dito, o importante é lembrar que aplicativos maiores geralmente têm desafios únicos. Você deve avaliar todas as soluções populares de terceiros existentes e provavelmente ganhará muito com algumas soluções obscuras. Quando avaliei o Recess pela primeira vez, ele estava longe de estar pronto para a produção, mas sua abordagem entrou no projeto.
atuação
Em sites típicos, você pode se safar com o cache de saída simples e o código de código de operação, mas em aplicativos de grande escala você deve considerar o cache de memória, que geralmente é construído em torno do memcached .
O xdebug é conhecido principalmente como depurador, mas também pode servir como criador de perfil . Recentemente, comecei a usar o Zend Server e adoro absolutamente seus recursos de rastreamento de código . Infelizmente, esses não estão disponíveis na Community Edition , mas o xdebug é uma alternativa bastante decente.
Se você estiver usando o Apache, certifique-se de otimizar o inferno . Aparentemente, nginx e lighttpd são escolhas melhores , em termos de desempenho, mas eu não os usei muito e não posso dizer.
Quanto ao banco de dados, o cache de consultas e resultados do Doctrine faz maravilhas, especialmente combinados com o memcached . E, claro, não podemos esquecer o front end. A equipe de desempenho excepcional do Yahoo reuniu uma extensa lista de práticas recomendadas . Eu não sou realmente um desenvolvedor front-end, mas vi resultados surpreendentes em projetos solo.
Por fim, o PHP possui um novo mecanismo de coleta de lixo , que vale a pena examinar.
Segurança
O mundo da segurança do PHP é caótico, para dizer o mínimo. Como não sou especialista, trate o seguinte como dicas genéricas:
Projeto de segurança de aplicativos da Web abertos
Muitas coisas boas estão lá, mas para uma visão geral rápida, você deve começar com a lista dos dez melhores . E pesquise soluções PHP para essas vulnerabilidades comuns.
Vulnerabilidades de pilha
Um bom hábito é monitorar periodicamente os bugs abertos do PHP . Mesmo que você não seja um especialista, quase sempre existem dicas de solução alternativa para ameaças à segurança. E, é claro, você deve estender o hábito a todas as outras partes da pilha, especialmente as mais vulneráveis, como o servidor da Web e o banco de dados.
A multidão no IT Security Stack Exchange pode ajudá-lo com respostas mais educadas.
Leitura adicional
fonte
O site developerworks da IBM possui uma enorme pilha de artigos sobre PHP , muitos deles muito bons. Eles têm uma série de artigos comparando estruturas da web PHP e outra sobre sites usando a estrutura do CakePHP .
O antigo site "Onlamp" de O'Reilly possui um artigo sobre MVC em PHP . O autor desse artigo continuou explicando o MVC com mais detalhes .
Os artigos da O'Reilly são um pouco antigos, mas vão ajudar você. O material do IBM developerWorks é realmente bom e cobre muito do que você está pedindo.
fonte
Estou trabalhando em PHP há alguns anos. Embora eu concorde com Yannis que essa questão esteja de alguma forma aberta, acho que estaria dando algumas dicas. Primeiro, como Yannis disse, você deve examinar o MVC. Para isso, os dois frameworks que posso recomendar são o CodeIgniter e o Symfony . O primeiro é leve e muito fácil de começar, no entanto, talvez seja necessário adicionar algumas personalizações extras para que uma boa configuração funcione. O Symfony é um projeto iniciado por Fabien Potencier que usa muitos dos padrões de design em engenharia de software; no entanto, a curva de aprendizado é muito mais acentuada que a do CodeIgniter .
Agora, segundo, você deve examinar a conexão com o banco de dados, o que me leva às duas estruturas ORM mais importantes para PHP, Doctrine e Propel . Pessoalmente, eu amo o Propel e até escrevi sobre como configurar uma instalação limpa do Propel em um aplicativo baseado em CodeIgniter , no entanto, o Symfony é mais sobre o Doctrine , mas vamos usar um deles. Se você quiser conferir um pouco mais sobre Doutrina e Propel , dê uma olhada nesta pergunta que fiz há algum tempo.
Finalmente, você deve procurar uma estrutura de modelos, como Smarty , Dwoo ou Twigg . Smarty é o mais antigo e, portanto, o mais estável. O Dwoo herda do Smarty e adiciona uma ou duas coisas para dar suporte ao OOP melhor no PHP 5. Finalmente, o Twigg é a alternativa de modelo, desde que a equipe do Symfony , eu não a tenha visto, mas se for da equipe do Symfony , deve ser legal .
Espero que todo esse discurso faça algum sentido, David
fonte