Skip to content

MVC

El patrón de arquitectura MVC (Modelo-Vista-Controlador) es un patrón de arquitectura que separa la lógica de negocio de la interfaz de usuario. Donde el patrón de arquitectura MVC se compone de tres componentes principales, el Modelo, la Vista, y el Controlador.

alt text

Modelo

El Modelo es la representación de los datos y la lógica de negocio de la aplicación. Donde el Modelo es el encargado de gestionar los datos de la aplicación, y de realizar las operaciones de la lógica de negocio de la aplicación. El Modelo es independiente de la Vista y del Controlador, y es el encargado de gestionar los datos de la aplicación.

Vista

La Vista es la representación visual de los datos del Modelo. Donde la Vista es el encargado de mostrar los datos del Modelo al usuario, y de recibir las acciones del usuario. La Vista es independiente del Modelo y del Controlador, y es el encargado de mostrar los datos del Modelo al usuario.

Controlador

El Controlador es el encargado de gestionar las acciones del usuario. Donde el Controlador es el encargado de recibir las acciones del usuario, y de realizar las operaciones de la lógica de negocio de la aplicación. El Controlador es independiente del Modelo y de la Vista, y es el encargado de gestionar las acciones del usuario.

Ventajas

  • Separación de la lógica de negocio de la interfaz de usuario.
  • Facilidad de mantenimiento.
  • Facilidad de reutilización.
  • Facilidad de escalabilidad.
  • Facilidad de pruebas.

Desventajas

  • Complejidad.
  • Dificultad de implementación.
  • Dificultad de aprendizaje.
  • Dificultad de depuración.
  • Dificultad de documentación.

Codificación

Modelo

User.dart

class User {
String name;
String email;
String password;
User({this.name, this.email, this.password});
}

Vista

UserView.dart

import 'package:flutter/material.dart';
import 'user_controller.dart';
class UserView extends StatefulWidget {
@override
_UserViewState createState() => _UserViewState();
}
class _UserViewState extends State<UserView> {
final UserController _controller = UserController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('User View'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'${_controller.counter}',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
_controller.incrementCounter();
});
},
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}

Controlador

UserController.dart

import 'package:flutter/material.dart';
class UserController {
int _counter = 0;
int get counter => _counter;
void incrementCounter() {
_counter++;
}
}

Casos donde se puede aplicar

Los casos ideales donde MVC brillan son aquellos donde se necesita separar la lógica de negocio de la interfaz de usuario. Donde MVC es ideal para aplicaciones que necesitan una interfaz de usuario compleja, y que necesitan una lógica de negocio compleja pero un manejo de datos simple y una gestion del estado simple.

Casos donde no se puede aplicar

Los casos donde MVC no es recomendable son aquellos donde se necesita una interfaz de usuario compleja pero una lógica de negocio simple.

Consejos

Aunque es tentador utilizar MVC en todos los proyectos, es importante recordar que MVC no es la solución a todos los problemas de diseño de software. Y es por eso que es importante analizar profundamente el problema que tiene, y buscar el patrón de arquitectura que mejor se adapte a su problema.

Puede que sea el patron con el que este mas familiarizado, pero representa muchos problemas en cuestion de escalabilidad y mantenimiento. Es por eso que es importante considerar otros patrones de arquitectura como VIPER, MVVP, MVVM, Clean Architecture, Hexagonal Architecture, entre otros.