Baseado em: Angular 17+
Guia de referência para criar projetos escaláveis, performáticos e fáceis de manter.
src/
├── app/
│ ├── core/ # Serviços e funcionalidades globais
│ ├── shared/ # Componentes e utilitários compartilhados
│ ├── layout/ # Templates e layouts base
│ ├── features/ # Módulos funcionais da aplicação
│ └── app.module.ts # Módulo raizgraph TB
A[AppModule] --> B[CoreModule]
A --> C[SharedModule]
A --> D[FeatureModules]
D --> E[AuthModule]
D --> F[DashboardModule]
D --> G[PagamentosModule]
B --> H[Guards]
B --> I[Services]
B --> J[Interceptors]
C --> K[Components]
C --> L[Directives]
C --> M[Pipes]
graph LR
A[Componente Pai] -->|Input| B[Componente Filho]
B -->|Output| A
C[Serviço] -->|Observable| A
C -->|Observable| B
graph TD
A[Browser] -->|Carga Inicial| B[AppModule]
B --> C[CoreModule]
B --> D[SharedModule]
B -.->|Lazy Load| E[Feature 1]
B -.->|Lazy Load| F[Feature 2]
B -.->|Lazy Load| G[Feature 3]
sequenceDiagram
Componente->>Serviço: Requisita Dados
Serviço->>Interceptor HTTP: Requisição HTTP
Interceptor HTTP->>API Backend: Requisição Modificada
API Backend->>Interceptor HTTP: Resposta
Interceptor HTTP->>Serviço: Resposta Modificada
Serviço->>Componente: Dados Atualizados
graph LR
A[Login Component] --> B[Auth Service]
B --> C[HTTP Interceptor]
C --> D[Backend API]
B --> E[Auth Guard]
E -->|Permite/Bloqueia| F[Rotas Protegidas]
stateDiagram-v2
[*] --> NaoAutenticado
NaoAutenticado --> Autenticado: Login
Autenticado --> NaoAutenticado: Logout
Autenticado --> CarregandoDados: Requisição
CarregandoDados --> ExibindoDados: Sucesso
CarregandoDados --> EstadoErro: Erro
EstadoErro --> CarregandoDados: Tentar Novamente
- Propósito: Serviços singleton e utilitários globais
- Componentes:
- Guards de autenticação
- Interceptors HTTP
- Serviços globais
- Modelos de dados (interfaces)
- Componentes Reutilizáveis:
- Formulários customizados
- Componentes UI (Botões, Cards, etc)
- Pipes personalizados
- Diretivas
- Estruturas de Layout:
layout/ ├── auth-layout/ # Layout para páginas de autenticação └── app-layout/ # Layout para área logada ├── header/ └── sidebar/
- Módulos Funcionais:
features/ ├── auth/ # Autenticação ├── dashboard/ # Painéis ├── pagamentos/ # Módulo de pagamentos └── configuracoes/ # Configurações
- Arquivos:
feature-name.component.ts - Classes:
FeatureNameComponent - Seletores:
app-feature-name
const routes: Routes = [
{
path: "feature",
loadChildren: () =>
import("./features/feature/feature.module").then((m) => m.FeatureModule),
},
];// core/services/auth.service.ts
@Injectable({
providedIn: "root",
})
export class AuthService {
// Implementação
}// shared/components/input/input.component.ts
@Component({
selector: "app-input",
template: `
<div class="input-wrapper">
<label>{{ label }}</label>
<input [formControlName]="controlName" />
</div>
`,
})
export class InputComponent {
@Input() label: string;
@Input() controlName: string;
}// features/dashboard/dashboard.module.ts
@NgModule({
imports: [CommonModule, SharedModule, DashboardRoutingModule],
declarations: [DashboardComponent, DashboardWidgetComponent],
})
export class DashboardModule {}// feature.component.spec.ts
describe("FeatureComponent", () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [FeatureComponent],
imports: [SharedModule],
}).compileComponents();
});
it("deve criar o componente", () => {
const fixture = TestBed.createComponent(FeatureComponent);
expect(fixture.componentInstance).toBeTruthy();
});
});-
Detecção de Mudanças
- Use
ChangeDetectionStrategy.OnPush - Implemente
trackByem *ngFor
- Use
-
Otimização de Módulos
- Lazy loading em rotas
- Pré-carregamento estratégico
-
Gerenciamento de Estado
- Utilize serviços com BehaviorSubject
- Considere NgRx para apps complexos
Esta estrutura promove:
- Manutenibilidade
- Escalabilidade
- Reutilização de código
- Separação clara de responsabilidades