Você levantou uma questão muito interessante e fundamental. A questão referente à arquitetura do projeto em larga escala e à organização da estrutura de pastas (secundária à arquitetura).
Hoje, a abordagem mais comum para a construção da arquitetura da estrutura do CMS é o uso do padrão MVC. Existem alguns bons artigos sobre como criar suas próprias estruturas MVC, uma delas é Construir uma estrutura MVC com PHP .
MVC significa Model, View, Controller. Você pode chamar essas abordagens como desejar - MVC, HMVC, MVP. A essência é isolar os componentes individuais do seu sistema. O "Controlador" recupera os dados do "Modelo" e os envia para "Visualizar", que renderiza o HTML final. Você já implementou o "V" no seu contacts.php
e "MC" no seu contacts_class.php
. Então você isolou a vista do modelo e do controlador. Agora você pode alterar facilmente sua "Visualização", deixando outras partes intactas.
Não estou sugerindo que você siga cegamente o padrão MVC, MVP ou qualquer outra coisa "MV". É uma questão de adequação, eficácia e sabor.
O aplicativo dinâmico de site comum pode incluir componentes como:
- O ponto de entrada, digamos
index.php
- As bibliotecas / classes auxiliares
- O roteador de solicitação
- Os módulos, componentes ou controladores
- O mecanismo do modelo ou talvez visualizações únicas
O aplicativo da Web real pode incluir outros componentes, como manipuladores de eventos, expedidores de eventos e ganchos, mas essas são, na verdade, nuances. Bem, deixe-me apresentar da maneira que quero apresentar:
A rotina de operação de estrutura comum da seguinte maneira:
- A solicitação do navegador é enviada diretamente para o ponto de entrada executável / script (
index.php
).
- O script do ponto de entrada carrega as bibliotecas auxiliares, classes e executa alguma inicialização adicional do nosso ambiente de programação.
- O URL é passado para a instância do roteador de solicitação. Esta etapa pode fazer parte da etapa 2.
- O roteador de solicitação analisa a URL e despacha a operação para um componente, módulo ou controlador específico.
- O componente (ou controlador) processa a solicitação roteada e envia os dados para a exibição a ser renderizada.
A estrutura da pasta do projeto correspondente é mostrada no diagrama.
Eu sugeriria que você investigasse como as outras estruturas são implementadas. Os CMS / framework recomendados para começar são CodeIgniter, OpenCart, Joomla 1.5 e Tango CMS.
Para ter uma idéia de quais perguntas fazer e quais soluções estão disponíveis, recomendo o livro Patterns of Enterprise Application Architecture de Martin Fowler. Você pode ter uma idéia do que está no livro lendo o site dele.
Esteja ciente de que o livro já é bastante antigo (na área de TI), mas muitos princípios ainda são válidos ou você deve aprender com eles. (Aquilo fez sentido?)
A arquitetura (software) é um assunto muito amplo, não espere uma bala de prata, mas sempre mais perguntas e mais dúvidas até que o tempo e o dinheiro acabem e você tenha que ficar com a melhor solução até agora.
fonte
Primeiro de tudo, dê uma olhada no projeto bem desenvolvido. O Wordpress é um exemplo muito interessante de estrutura de código: é simples de entender, mas oferece bastante "plug". Assim, o wordpress é fácil de obter via "plug-in".
Segundo, uma maneira muito fácil de verificar sua arquitetura é tentar escrever um teste de unidade. Por exemplo, se a classe "Baralho de Cartas" tiver um método "shuffle ()", você deverá criar um Baralho de Cartas de tamanho predefinido (ou seja, 5 cartões 1,2,3,4,5), chamar shuffle e verificar em um maneira fácil o resultado (id 1,4,2,5,3)
Você deve poder fazer isso sem instanciar todas as classes do projeto, e o teste deve ser muito limpo para ler.
Se você não conseguir, adicione camadas entre classes, reestruture-as, até obter uma maneira fácil de fazê-lo.
Em seguida, reitere esta etapa para todas as classes principais do seu projeto.
Por último, mas não menos importante: uma boa arquitetura poderia ser "preguiçosa" em classes não tão essenciais (é uma questão de economia: coisas muito bem projetadas custam muito no mundo real).
fonte
Uma boa arquitetura para projetos de grande escala é o MVC (Model View Controller): http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
Entretanto, se outros programadores entenderiam isso é uma questão totalmente diferente. O MVC pode se tornar complexo e, às vezes, é um exagero para pequenos projetos. Um dos benefícios disso é que ele pode ser dimensionado facilmente.
fonte
Se entendi sua pergunta corretamente, você está falando sobre a estrutura de pastas do projeto e não sobre uma arquitetura. Se meu entendimento estiver correto, continue lendo; caso contrário, edite sua pergunta ou faça um comentário e eu editarei minha resposta de acordo.
Ao projetar um aplicativo, depois de responder a algumas perguntas básicas como (o quê? E para quem?), Precisamos identificar os componentes e classificá-los com base na funcionalidade \ responsabilidades. Existem duas maneiras principais que eu conheço. Você pode classificar componentes com base nos casos de uso que eles manipulam (como login, pesquisa, etc.) ou classificar com base em Recursos (Objetos ..). A primeira maneira é chamada Orientada a Atividade e a segunda, Orientada a Recursos. Tradicionalmente, a maioria dos aplicativos classifica componentes com base em Atividades (já que os designers o acharam, fácil ao transferir do domínio do problema para o domínio da solução).
Depois que a classificação do componente é identificada, precisamos identificar a classificação com base em Camadas. Um aplicativo da Web típico terá View Tier, Model Tier e Controller Tier (MVC). Claro que também poderia haver aplicativos mais complexos. (a maioria dos aplicativos do mundo real é mais complexa do que simples assim).
Depois de identificar essas duas taxonomias, vou criar pastas de nível superior Identificando cada camada. (UI, Controller, Serviços, Utils etc). Em cada pasta de alto nível, criarei pastas filho com base na Funcionalidade ou Recursos (Projeto - / EditProject - / SearchProject etc). A classificação funcional ideal será multinível.
fonte
Existem boas arquiteturas e más arquiteturas, no entanto, não existem balas de prata. Uma arquitetura deve ser adequada aos requisitos atuais atuais e altamente possíveis.
Uma boa diretriz seria: certifique-se de que cada parte do aplicativo possa ser alterada com um efeito mínimo nas outras partes e que cada parte tenha testes de integração e unidade de cobertura automatizados.
fonte
Arquitetura é garantir que você possa continuar desenvolvendo a longo prazo. Para aplicativos maiores, isso inclui fazer trocas entre tornar as coisas independentes, para que várias pessoas possam trabalhar simultaneamente e evitar a duplicação (DRY), para que o projeto possa permanecer ágil. Os projetos PHP tendem a se concentrar em tornar as coisas independentes e têm uma grande quantidade de duplicação.
Para ter uma boa idéia da outra posição extrema, dê uma olhada no Seaside
fonte
Se você não sabe como estruturar um projeto grande, deve emprestar o design / arquitetura de outras pessoas usando um dos vários Frameworks PHP bons. Eu recomendaria CakePHP, CodeIgniter ou Symfony. Tudo isso implementa um padrão Model, View, Controller, MVC que funciona bem no desenvolvimento da Web, todos eles são bastante leves e fáceis de aprender.
Depois de conhecer um desses frameworks, você poderá arquitetar sua própria estrutura para seu projeto em particular, mas, se você está começando, eu continuaria com o trabalho de outros e reinventaria a roda.
fonte
MVC é a arquitetura mais comumente usada, que comprovadamente resolve a maioria dos problemas. Uma boa arquitetura terá os seguintes recursos (e mais, orcourse)
fonte
Antes de escrever qualquer código de produção, tire 2 semanas (noites :) e leia este livro. Por um longo tempo, você mudará de idéia sobre arquitetura de programação, práticas e empacotamento.
Princípios, padrões e práticas ágeis C # por Prentice Hall
Os exemplos estão em C #, mas são fáceis de ler, não se trata de como escrever a sintaxe de código correta, mas de como pensar como programador.
Eu prometo que você o salvará no seu lugar mais acessível no seu PC e ficará surpreso ao ver que está programando sem ter que saber. Isso mudará seu pensamento.
fonte