Patrón MVC en Android
¿Es posible implementar el patrón modelo-vista-controlador en Java para Android?
¿O ya está implementado a través de Actividades? ¿O existe una mejor manera de implementar el patrón MVC para Android?
En Android no tienes MVC, pero tienes lo siguiente:
- Usted define su interfaz de usuario en varios archivos XML por resolución, hardware, etc.
- Usted define sus recursos en varios archivos XML por configuración regional, etc.
- Extiende clases como ListActivity , TabActivity y utiliza el archivo XML mediante infladores .
- Puede crear tantas clases como desee para su lógica empresarial.
- Ya se han escrito muchas utilidades para usted: DatabaseUtils, Html.
No existe un patrón MVC universalmente único. MVC es un concepto más que un marco de programación sólido. Puedes implementar tu propio MVC en cualquier plataforma. Siempre que se ciña a la siguiente idea básica, estará implementando MVC:
- Modelo: Qué renderizar
- Ver: Cómo renderizar
- Controlador: Eventos, entrada del usuario
Piénselo también de esta manera: cuando programe su modelo, el modelo no debería tener que preocuparse por la representación (o el código específico de la plataforma). El modelo le diría a la vista: No me importa si tu renderizado es Android, iOS o Windows Phone, esto es lo que necesito que renderices. La vista solo manejaría el código de representación específico de la plataforma.
Esto es particularmente útil cuando usa Mono para compartir el modelo con el fin de desarrollar aplicaciones multiplataforma.
Las acciones, vistas y actividades en Android son la forma integrada de trabajar con la interfaz de usuario de Android y son una implementación del patrón modelo-vista-modelo de vista (MVVM) , que es estructuralmente similar (en la misma familia que) modelo-vista. -controlador.
Hasta donde yo sé, no hay forma de salir de este modelo. Probablemente se pueda hacer, pero probablemente perdería todos los beneficios que tiene el modelo existente y tendría que reescribir su propia capa de interfaz de usuario para que funcione.
Después de algunas búsquedas, la respuesta más razonable es la siguiente:
MVC ya está implementado en Android como:
- Ver = diseño, recursos y clases integradas como las
Button
derivadas deandroid.view.View
. - Controlador = Actividad
- Modelo = las clases que implementan la lógica de la aplicación.
(Esto, por cierto, implica que no hay lógica de dominio de aplicación en la actividad).
Lo más razonable para un pequeño desarrollador es seguir este patrón y no intentar hacer lo que Google decidió no hacer.
PD: Tenga en cuenta que la Actividad a veces se reinicia, por lo que no es lugar para los datos del modelo (la forma más fácil de provocar un reinicio es omitir android:configChanges="keyboardHidden|orientation"
el XML y encender su dispositivo).
EDITAR
Puede que estemos hablando de MVC , pero será por así decirlo FMVC , Framework--Model--View--Controller . El Framework (el sistema operativo Android) impone su idea del ciclo de vida de los componentes y los eventos relacionados y, en la práctica, el Controlador ( Activity
/ Service
/ BroadcastReceiver
) es ante todo responsable de hacer frente a estos eventos impuestos por el Framework (como onCreate() ). ¿Deberían procesarse las entradas del usuario por separado? Incluso si debería, no puedes separarlo, los eventos de entrada del usuario también provienen de Android.
De todos modos, cuanto menos código que no sea específico de Android pongas en tu Activity
// , mejor.Service
BroadcastReceiver