← Back to list

architecture
by F4TB0Yz
⭐ 0🍴 0📅 Jan 25, 2026
SKILL.md
name: architecture description: Experto en arquitectura limpia modularizada por features. Genera código optimizado, archivos cortos, desacoplados y con cumplimiento estricto de reglas de linter (0 warnings).
Responsabilidad Única
Definir la estructura del proyecto y patrones arquitectónicos. NO incluye UI/UX, lógica de negocio, ni optimizaciones de performance.
Estructura de Proyecto (Feature-First)
Para cada funcionalidad (feature_name), el agente debe organizar los archivos así:
lib/features/feature_name/
├── domain/
│ ├── entities/
│ ├── repositories/ (interfaces)
│ └── usecases/
├── data/
│ ├── models/
│ ├── datasources/
│ └── repositories/ (implementaciones)
└── presentation/
├── providers/ (Riverpod) o bloc/ (Bloc)
├── pages/
└── widgets/
Stack Técnico Core
State Management
- Riverpod: Preferido para nuevos features (Notifier API, AsyncNotifier)
- Bloc: Alternativa válida (extender de Equatable para optimizar comparación de estados)
Dependency Injection
- GetIt: Registro manual de dependencias en archivo centralizado
service_locator.dart - Registrar como singleton, lazy singleton o factory según el caso
Navigation
- GoRouter: Routing declarativo con guards de autenticación
- Definir rutas en archivo centralizado
- Implementar Auth Guard usando Supabase Session
Error Handling
- fpdart: Usar tipo
Either<Failure, Success>para manejo funcional de errores - Definir
Failureclasses en la capa Domain - Nunca usar
print()para errores, siempre retornarFailure
Modelado de Datos
- Models (Data Layer): Incluir métodos
toEntity()yfromEntity() - Entities (Domain Layer): Clases inmutables con
freezedoequatable - Separación estricta: Models manejan JSON, Entities son puros
Testing Strategy (TDD)
Workflow TDD
Para cada feature, seguir este orden:
- Escribir test del Use Case (usando Mocktail)
- Implementar Use Case para que el test pase
- Escribir test del Repository
- Implementar Repository
- Escribir test del Provider/Bloc
- Implementar Provider/Bloc
Tools
- Mocktail: Para mocks y stubs
- flutter_test: Testing framework
- integration_test: Para tests E2E
Mandamientos de Código
Inmutabilidad
- Todo widget debe usar
constsiempre que sea posible - Clases de estado deben ser inmutables (
finalfields) - Usar
freezedoequatablepara value objects
Atomicidad
- Máximo una clase principal por archivo
- Si un Widget es complejo (>60 líneas), extraerlo a
widgets/de la feature - Archivos cortos: 150-200 líneas máximo
- Priorizar composición sobre herencia
Cero Tolerancia a Warnings
- Tras generar o editar código, verificar que no existan warnings
- Lints, tipos faltantes, imports sin usar: TODO debe estar limpio
- Usar
analysis_options.yamlestricto
Organización de Imports
// 1. Dart core
import 'dart:async';
// 2. Flutter
import 'package:flutter/material.dart';
// 3. Packages externos
import 'package:riverpod/riverpod.dart';
// 4. Imports internos (features)
import 'package:vector/features/packages/domain/entities/package.dart';
Protocolo de Implementación
Al solicitar una nueva funcionalidad, el agente responderá en este orden:
- Entidad (Domain) - Definir la entidad core
- Interfaz del Repositorio (Domain) - Contrato del repositorio
- Casos de Uso (Domain) - Lógica de negocio pura
- Modelo y DTOs (Data) - Mappers
toEntity/fromEntity - Implementación del Repositorio (Data) - Conexión con datasources
- Provider/Bloc (Presentation) - State management
- UI Atómica (Presentation) - Widgets pequeños y reutilizables
Reglas de Separación de Capas
Domain (Núcleo)
- ✅ Entities, Use Cases, Repository Interfaces
- ❌ PROHIBIDO: Importar Flutter, paquetes de terceros (excepto fpdart/equatable)
Data
- ✅ Models, DataSources, Repository Implementations
- ✅ Puede importar: Supabase, HTTP clients, JSON serialization
- ❌ PROHIBIDO: Importar Flutter widgets
Presentation
- ✅ Providers/Bloc, Pages, Widgets
- ✅ Puede importar: Flutter, Riverpod/Bloc, Domain entities
- ❌ PROHIBIDO: Importar Models de Data directamente
File Naming Conventions
- Entities:
package.dart,delivery_route.dart - Models:
package_model.dart,delivery_route_model.dart - Repositories:
package_repository.dart(interface y implementation) - Use Cases:
get_packages.dart,create_package.dart - Providers:
package_provider.dart - Screens:
packages_screen.dart,add_package_screen.dart - Widgets:
package_card.dart,status_badge.dart
Ejemplo de Feature Completa
lib/features/packages/
├── domain/
│ ├── entities/
│ │ └── package.dart
│ ├── repositories/
│ │ └── package_repository.dart
│ └── usecases/
│ ├── get_packages.dart
│ └── create_package.dart
├── data/
│ ├── models/
│ │ └── package_model.dart
│ ├── datasources/
│ │ └── package_remote_datasource.dart
│ └── repositories/
│ └── package_repository_impl.dart
└── presentation/
├── providers/
│ └── package_provider.dart
├── pages/
│ └── packages_screen.dart
└── widgets/
└── package_card.dart
Score
Total Score
50/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
Reviews
💬
Reviews coming soon