Estrutura - Pastas e arquivos
A JSagon Framework por padrão fornece uma arquitetura e estrutura de pastas e arquivos para facilitar o desenvolvimento e futura escalabilidade de acordo com o crescimento do projeto. Essa estrutura leva em consideração uma série de avaliações de projetos, sejam eles do Github, sites, cursos, entre outros.
Para explicar a estrutura, é essencial explicar a abordagem de Múltiplas Aplicações implementada e utilizada nesta framework.
Contexto: O motivo da implementação surgiu da necessidade constante de criar em um mesmo projeto (servidor ou aplicação), sistemas relacionados, mas de certa maneira distintos e sem misturar as responsabilidades e código. Um exemplo de implementação seria a criação de um site ou blog sobre finanças e um aplicativo de finanças. Ambos respectivamente seriam acessados via financas.com e financas.com/app. A implementação estrutural interna é baseada em uma divisão de pastas e arquivos por projetos, cada um em seu escopo. No decorrer deste artigo, ficará mais claro o sentido e o modelo de divisão propriamente dito.
Devido ao nível de detalhamento aqui apresentado, o projeto pode parecer complexo. Todas as pastas e arquivos serão explicados nos seus respectivos artigos separadamente (View, Controlador, etc), então não se preocupe. Mas entendido o conceito, tudo se encaixará facilmente.
O diretório responsável por toda a estrutura de desenvolvimento é o "dev", aquele que se encontra na raiz do projeto. Dentro dele existe as seguintes pastas:
public | pasta responsável por armazenar os arquivos estáticos (css, js, imagens, etc) |
resource | pasta responsável por armazenar os códigos da view e outros (.hbs, scss, vuejs, entre outros) |
src | responsável pelo código "back-end" |
Para facilitar o entendimento, é recomendado acompanhar com um projeto local criado.
Obs.: os exemplos utilizarão a extensão .ts (TypeScript), mas funcionará igualmente com JavaScript e sua extensão .js.
A pasta "src" inicialmente possui:
server.ts | Arquivo e código ponto de entrada. Responsável por inicializar toda a aplicação. |
config | Pasta de configurações gerais. Comum a todas as aplicações. |
http | Implementações http gerais. Comum a todas as aplicações. Será apropriadamente explicado nos próximos artigos, mas em resumo possui implementação de middlewares gerais, entre outros. |
app | Pasta responsável pela estrutura e organização dos projetos. |
O modelo abaixo exemplifica a estrutura em um modelo com múltiplos projetos. Quando escolhido uma arquitetura de aplicação única, a estrutura da pasta app será a mesma que a estrutura de um projeto único.
A estrutura dos projetos dentro do "app" segue o seguinte modelo: Cada projeto/app possui sua configuração e recursos, sua implementação é subdivida em Módulos, que por sua vez cada Módulo é subdivido em Controladores, Repositórios, etc.
Exemplo visual hierárquico das pastas e arquivos:
- app: pasta com o código dos projetos propriamente dito.
- nome do projeto 1 (exemplo: FinancasApp)
- app.config.ts: configuração específica do projeto.
- modules: módulos do projeto
- nome do módulo 1 (Relatorio)
- Config
- Routes.ts
- Controller
- Ex.:GraficoController.ts
- Config
- nome do módulo 1 (Relatorio)
- http: middlewares, kernel, etc.
- nome do projeto 2 (exemplo: FinancasWebsite)
- nome do projeto 1 (exemplo: FinancasApp)
Obs.: os exemplos utilizarão a extensão .hbs (handlebars), mas servirão igualmente para outras View Engines.
O modelo abaixo exemplifica a estrutura em um modelo com múltiplos projetos. Quando escolhido uma arquitetura de aplicação única, a estrutura da pasta app será a mesma que a estrutura de um projeto único.
A pasta resource inicialmente possui:
- views: pasta responsável pelos códigos html. Dentro dela se encontra:
- default: views padrões, como error.hbs, e error404.hbs.
- layouts: views de layout da aplicação, o arcabouço.
- app pasta com o código dos projetos propriamente dito. Obs.: os nomes a seguir segue uma convenção interna automática com base no dev/src/app, exemplo: projeto "FinancasApp" que se torna "financas-app" em views/app). Seguindo o exemplo do código back-end da explicação do **src**, ficaria:
- nome do projeto 1 (exemplo: financas-app)
- nome do módulo 1 (relatorio)
- nome do controlador (grafico)
- nome da action.hbs (detalhe-relatorio.hbs)
- Controller
- Ex.:GraficoController.ts
- nome do controlador (grafico)
- nome do módulo 1 (relatorio)
- nome do projeto 2
- nome do projeto 1 (exemplo: financas-app)
Os pontos aqui apresentados serão melhor detalhados e compreendidos na explicação de cada recurso separadamente. Ir para Controlador