Este proyecto es una aplicación móvil desarrollada en Flutter que simula las operaciones básicas de un banco virtual.
El objetivo principal no es la funcionalidad bancaria en sí, sino la demostración de una arquitectura de software robusta basada en los Principios GRASP y Patrones Emergentes de diseño.
- Gestión de Estado de Cuenta: Abrir y Cerrar cuentas.
- Transacciones: Depósitos y Retiros con validación de fondos.
- Reactividad: Actualización de la UI en tiempo real basada en el estado del dominio.
El proyecto sigue una estructura de capas estricta para asegurar Alta Cohesión y Bajo Acoplamiento.
| Patrón | Implementación en Código | Descripción |
|---|---|---|
| Controller | BankController |
Media entre la UI y la lógica de negocio. Recibe eventos del usuario y orquesta la respuesta. |
| Pure Fabrication | BankRepositoryImpl |
Una clase artificial creada para manejar la persistencia y reglas de negocio, evitando contaminar el modelo de dominio. |
| Information Expert | BankAccount |
La entidad que posee los datos (saldo, estado) y es responsable de mantener su integridad. |
| Low Coupling | IBankRepository |
El sistema depende de abstracciones (interfaces), no de implementaciones concretas. |
| Creator | Injector |
Clase responsable de instanciar y ensamblar las dependencias del sistema. |
- Repository Pattern: Aísla la capa de datos. Permite cambiar la fuente de datos (API, Base de Datos local, Mock) sin afectar a la UI ni al Controlador.
- Dependency Injection (DI): Inyectamos las dependencias en el constructor del controlador a través de la clase
Injector, facilitando el testing y la escalabilidad.
lib/
├── core/
│ └── injector.dart # Configuración de Inyección de Dependencias
├── data/
│ └── repositories/
│ └── bank_repo_impl.dart # Implementación lógica (Pure Fabrication)
├── domain/
│ ├── interfaces/
│ │ └── i_bank_repo.dart # Contrato abstracto (Low Coupling)
│ └── models/
│ └── bank_account.dart # Entidad del dominio (Information Expert)
├── presentation/
│ ├── controllers/
│ │ └── bank_controller.dart # Gestión de estado (Controller)
│ └── screens/
│ └── home_screen.dart # Interfaz de Usuario (Flutter Widgets)
└── main.dart # Punto de entrada
- Clonar el repositorio:
git clone https://github.com/Alexis-Lozada/grasp_bank.git
- Instalar dependencias:
cd grasp_bank
flutter pub get
- Ejecutar la aplicación:
flutter run
- Flutter (Framework UI)
- Dart (Lenguaje)
- ChangeNotifier (Gestión de estado nativa)
Hecho con ☕ y Flutter.