Una implementación completa de Clean Architecture para Angular con i18n, gestión de estado y mejores prácticas de desarrollo.
- 🏗️ Clean Architecture: Separación clara entre capas (Core, Data, Presentation)
- 🌍 i18n Completo: Sistema de internacionalización reactivo y tipado
- 📱 Responsive Design: Interfaz adaptable con PrimeNG + PrimeFlex
- 🔧 TypeScript Strict: Tipado fuerte y configuración estricta
- 🎯 SOLID Principles: Implementación de principios de diseño
- 🧪 Testing Ready: Configuración lista para pruebas unitarias
- 📦 Modular Architecture: Estructura por features escalable
- 🚀 Production Ready: Optimizado para producción
- Framework: Angular 17+
- Lenguaje: TypeScript
- UI Library: PrimeNG + PrimeFlex
- Reactive Programming: RxJS
- Internacionalización: ngx-translate
- Code Quality: ESLint + Prettier
- Testing: Jasmine + Karma
src/app/
├── core/ # 🎯 Lógica de negocio y servicios base
│ ├── components/ # Componentes base reutilizables
│ ├── entities/ # Entidades del dominio
│ ├── i18n/ # Sistema de internacionalización
│ │ ├── config/ # Configuración, constantes y tipos
│ │ └── services/ # Servicios especializados de i18n
│ └── service-providers/ # Configuración de inyección de dependencias
├── shared/ # 🔧 Servicios y componentes compartidos
│ ├── components/ # Componentes UI compartidos
│ └── services/ # Servicios utilitarios
├── features/ # 📦 Módulos por funcionalidad
│ └── example-feature/ # Ejemplo de feature completo
│ ├── core/ # Lógica de negocio del feature
│ ├── data/ # Repositorios e implementaciones
│ └── presentation/ # Componentes y páginas
└── layout/ # 🎨 Componentes de layout principal
git clone https://github.com/tu-usuario/angular-clean-architecture.git
cd angular-clean-architecturenpm installnpm starthttp://localhost:4200
| Comando | Descripción |
|---|---|
npm start |
Inicia el servidor de desarrollo |
npm run build |
Construye la aplicación para producción |
npm run build:dev |
Construye para desarrollo |
npm run build:qa |
Construye para QA |
npm run build:prod |
Construye para producción |
npm test |
Ejecuta las pruebas unitarias |
npm run lint |
Ejecuta el linter |
npm run lint:fix |
Corrige automáticamente errores de linting |
npm run format |
Formatea el código con Prettier |
npm run type-check |
Verifica los tipos de TypeScript |
-
🎯 Core (Dominio)
- Entidades de negocio
- Casos de uso (Interactors)
- Interfaces de repositorios
- Reglas de negocio
-
📊 Data (Infraestructura)
- Implementaciones de repositorios
- Servicios externos (APIs)
- Mappers de datos
- Fuentes de datos
-
🎨 Presentation (UI)
- Componentes Angular
- Páginas y routing
- Gestión de estado local
- Interacción con el usuario
- Dependency Inversion: Las capas internas no dependen de las externas
- Single Responsibility: Cada clase tiene una única responsabilidad
- Open/Closed: Abierto para extensión, cerrado para modificación
- Interface Segregation: Interfaces específicas y cohesivas
- Liskov Substitution: Las implementaciones son intercambiables
- Tipado fuerte: Interfaces explícitas para traducciones
- Reactividad: Cambio automático de idioma en toda la app
- Configuración centralizada: Un solo lugar para definir textos
- Fallbacks: Textos por defecto si falta una traducción
// 1. Definir configuración
export const MyPageConfig: I18nConfigEntity = {
i18n: {
title: 'mypage.title',
subtitle: 'mypage.subtitle'
}
};
// 2. En el componente
export class MyPageComponent implements OnInit {
public texts: ResolvedMyPageTexts = {} as ResolvedMyPageTexts;
ngOnInit() {
this.i18nService.getReactiveTexts(MyPageConfig)
.subscribe(texts => this.texts = texts);
}
}
// 3. En el template
<h1>{{ texts.title }}</h1>
<p>{{ texts.subtitle }}</p># Todas las pruebas
npm test
# Pruebas en modo watch
npm run test:watch
# Cobertura de código
npm run test:coverage- Unit Tests: Para servicios y lógica de negocio
- Component Tests: Para componentes Angular
- Integration Tests: Para flujos completos
src/app/features/mi-feature/
├── core/
│ ├── entities/ # Entidades del dominio
│ ├── repositories/ # Interfaces de repositorios
│ ├── usecases/ # Casos de uso
│ └── interactor/ # Orquestador principal
├── data/
│ └── repositories/ # Implementaciones
└── presentation/
├── pages/ # Páginas del feature
├── components/ # Componentes específicos
└── mi-feature.module.ts
# Generar componente
ng generate component features/mi-feature/presentation/pages/mi-page
# Generar servicio
ng generate service features/mi-feature/core/services/mi-service
# Generar módulo
ng generate module features/mi-feature/presentation/mi-featureenvironment.ts- Desarrolloenvironment.dev.ts- Desarrolloenvironment.qa.ts- QA/Testingenvironment.pdn.ts- Producción
import { environment } from '@environments/environment';
const apiUrl = environment.apiUrl;
const production = environment.production;- Archivos:
kebab-case.type.ts - Clases:
PascalCase - Variables/Métodos:
camelCase - Constantes:
UPPER_SNAKE_CASE - Interfaces:
PascalCase+ sufijoEntityoInterface
// 1. Angular core
import { Component, OnInit } from '@angular/core';
// 2. Librerías externas
import { Observable } from 'rxjs';
// 3. Imports internos (usando path mapping)
import { MyService } from '@core/services';
import { MyEntity } from '@shared/entities';- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -m 'feat: agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
feat:Nueva funcionalidadfix:Corrección de bugdocs:Documentaciónstyle:Formato de códigorefactor:Refactorizacióntest:Pruebaschore:Tareas de mantenimiento
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
- Angular Team por el increíble framework
- PrimeNG por los componentes UI
- Clean Architecture por los principios de diseño
- Comunidad Open Source por las librerías utilizadas
¿Tienes preguntas o sugerencias?
- 🐛 Issues: GitHub Issues
- 💬 Discusiones: GitHub Discussions
- 📧 Email: danielcol247@gmail.com
¡Construye aplicaciones Angular escalables y mantenibles! 🚀