Esta respuesta se ha actualizado con el fin de seguir siendo relevante a partir de noviembre el año 2016
Parece que usted está buscando para architectural patterns en lugar de design patterns.
Los patrones de diseño tienen como objetivo describir un "truco" general que el programador podría implementar para manejar un conjunto particular de tareas de software recurrentes. Por ejemplo: en OOP, cuando existe la necesidad de que un objeto notifique a un conjunto de otros objetos sobre algunos eventos, se puede emplear el observer design pattern.
Dado que las aplicaciones de Android (y la mayoría de AOSP) están escritas en Java, que está orientado a objetos, creo que tendrá dificultades para buscar un único patrón de diseño de OOP que NO se use en Android.
patrones arquitectónicos, por el contrario, no se ocupan de tareas de software particulares - Su objetivo es proporcionar plantillas para organización de software basado en los casos de uso del componente de software en cuestión.
Suena un poco complicado, pero espero que un ejemplo aclare: si alguna aplicación se utilizará para obtener datos de un servidor remoto y presentarlo al usuario de una manera estructurada, entonces MVC podría ser un buen candidato para consideración. Tenga en cuenta que no dije nada sobre las tareas de software y el flujo de programas de la aplicación; simplemente lo describí desde el punto de vista del usuario, y surgió un candidato para un patrón arquitectónico.
Como mencionó MVC en su pregunta, creo que los patrones arquitectónicos son lo que está buscando.
Históricamente, no había directrices oficiales de Google sobre las arquitecturas de aplicaciones, que (entre otras razones) condujeron a un desastre total en el código fuente de aplicaciones de Android. De hecho, incluso hoy en día la mayoría de las aplicaciones que veo todavía no siguen las mejores prácticas de OOP y no muestran una clara organización lógica del código.
Pero hoy la situación es diferente: Google lanzó recientemente el Data Binding library, que está completamente integrado con Android Studio, e, incluso, implementó un conjunto de architecture blueprints for Android applications.
Hace dos años era muy difícil encontrar información sobre MVC o MVP en Android. Hoy, MVC, MVP y MVVM se han convertido en "palabras de moda" en la comunidad de Android, y estamos rodeados de innumerables expertos que constantemente intentan convencernos de que MVx es mejor que MVy. En mi opinión, discutir si MVx es mejor que MVy es totalmente inútil porque los términos en sí son muy ambiguos; solo mira las respuestas al this question, y te darás cuenta de que diferentes personas pueden asociar estas abreviaturas con construcciones completamente diferentes.
Debido a que oficialmente se ha iniciado la búsqueda del mejor patrón arquitectónico para Android, creo que estamos a punto de ver que salen a la luz varias ideas más. En este punto, es realmente imposible predecir qué patrones (o patrones) se convertirán en estándares de la industria en el futuro; tendremos que esperar y ver (supongo que es cuestión de un año o dos).
Sin embargo, hay una predicción que puedo hacer con un alto grado de confianza: El uso de la biblioteca de enlace de datos no se convertirá en un estándar de la industria. Confío en decirlo porque la biblioteca de enlace de datos (en su implementación actual) proporciona ganancias de productividad a corto plazo y algún tipo de pauta arquitectónica, pero hará que el código no sea sostenible a largo plazo. Una vez que surjan los efectos a largo plazo de esta biblioteca, se abandonará.
Ahora, a pesar de que tienen algún tipo de directrices oficiales y herramientas de hoy, yo, personalmente, no creo que estas directrices y herramientas son las mejores opciones disponibles (y definitivamente no son los únicos) . En mis aplicaciones uso mi propia implementación de una arquitectura MVC. Es simple, limpio, legible y comprobable, y no requiere bibliotecas adicionales.
Este MVC no solo es estéticamente diferente de los demás, sino que se basa en una teoría que dice Activities in Android are not UI Elements, que tiene enormes implicaciones en la organización del código.
Por lo tanto, si está buscando un buen patrón arquitectónico para las aplicaciones de Android que sigue los principios SOLID, puede encontrar una descripción de uno en mi publicación sobre MVC and MVP architectural patterns in Android.
Dado que la plataforma Android incorpora un kernel de Linux, es un paquete de software demasiado grande para responder a esta pregunta que no sean 'todos los patrones nombrados hasta ahora, y probablemente algunos nuevos si mira con suficiente atención' –
@Pete , Ok, probablemente tengas razón, pero al mismo tiempo no voy tan profundo como kernel, estoy interesado en la superficie de aplicación, por ejemplo en iOS 'UIViewController' implementado usando MVC (' UIViewController' es un controlador y su raíz 'UIView' es view),' UIApplication' usa delegación que tiene delegado de aplicación como delegado y así sucesivamente ... – Burjua
Creo que deberías aprender Android desde de abajo hacia arriba y no intente "portar" su conocimiento de iOS a Android. Hay muchos libros geniales por ahí. Apress hace un montón. Si comprende la aplicación y el ciclo de vida del servicio en Android, debería poder obtener instrucciones sobre cómo diseñarlas correctamente. – blindstuff