Arquitetura / design de aplicativo Web PHP [fechado]

20

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.

Brad Morris
fonte
Oi! A arquitetura mais comum para aplicativos da web é o MVC , para PHP e todas as outras plataformas da web populares. Dito isto, você deve ler nossas Perguntas frequentes . Embora a arquitetura do software esteja no tópico, você precisa revisar a questão para ser um pouco mais específica. Uma "discussão saudável sobre arquitetura geral" não se encaixa no formato de perguntas e respostas do site.
yannis
Eu sou um visitante frequente dos S / E Sites, mas tive a sensação de que não haveria uma resposta para essa pergunta, daí o comentário "discussão". Agradecimentos para o ponteiro MVC embora :)
Brad Morris

Respostas:

29

Um diagrama aproximado da arquitetura do mais recente projeto de larga escala em que estive envolvido.

insira a descrição da imagem aqui

É 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

yannis
fonte
1
Ótima resposta; ótima apresentação; ótimo layout ... Ótimo trabalho!
Dynamic
@Jae Thanks! Você leu tudo isso? : P É um pouco longo, eu queria saber se devo podá-lo um pouco.
precisa saber é
Ha, eu tentei! ;-)
Dynamic
Na verdade Yannis, eu tenho uma pergunta para você. Recentemente, fiquei muito interessado em PHP. Eu mesmo tenho tentado aprender, mas estou tendo um pouco de dificuldade. Também parece que você é muito bom com o PHP :-). Você se importaria de compartilhar um pouco de orientação? Nesse caso, vou criar uma sala de bate-papo.
Dynamic
Esse é exatamente o tipo de resposta que eu estava procurando! É muita informação para absorver, acho que vou ter que absorver e mexer durante a próxima hora, mas você me deu um lugar para começar. Obrigado :)
Brad Morris
1

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.

Bruce Ediger
fonte
1

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

David Conde
fonte