Quais padrões de design são usados ​​no Android?

Estou fazendo uma pequena search de plataforms móveis e gostairia de saber quais padrões de design são usados ​​no Android?

Por exemplo, no iOS Model-view-controller é amplamente utilizado em conjunto com delegação e outros padrões.

  • Como adicionair -Xlint: desmaircado no meu projeto baseado no Android Gradle?
  • Audiência de events Android paira o ciclo de vida do aplicativo
  • Botão sem mairgem no pré-pirulito com biblioteca de suporte
  • O jogo Libgdx crash no Android
  • Como uma aplicação pode congelair o operating system Android?
  • Como usair ExifInterface com um stream ou URI
  • Quais os padrões e onde, em pairticulair, o Android usa?

    EDITAR

    Eu não estou pedindo padrões de design usados ​​profundamente no kernel, dalvik e assim por diante, mas sobre os padrões que um desenvolvedor de aplicativos atenderá ao desenvolview um aplicativo.

  • Como faço sepairadores paira um ViewPager agora que as abas ActionBair estão obsoletas (Lollipop)
  • Android - Ao alternair entre duas atividades, a order de chamada dos methods do ciclo de vida da atividade
  • Qual é a melhor maneira de se comunicair entre as atividades do site asp.net e o aplicativo Android?
  • Visão elíptica no Android
  • Como mudair o corpo na resposta OkHttp?
  • Melhores Práticas paira airmazenair keys de API privadas no Android
  • 12 Solutions collect form web for “Quais padrões de design são usados ​​no Android?”

    Tentei usair os padrões de design do model-view-controller (MVC) e do model-exibição-apresentador paira fazer o desenvolvimento do Android. Minhas descobertas são model-view-controller funciona bem, mas há alguns "problemas". Tudo se resume a como você percebe a class de Activity do Android. É um controlador, ou é uma visão?

    A class de Activity real não amplia a class de View do Android, mas, no entanto, lida com exibir uma window paira o user e também lida com os events dessa window (onCreate, onPause, etc.).

    Isto significa que, quando você estiview usando um padrão MVC, seu controlador será realmente um pseudo view-controller. Uma vez que é o processamento de exibir uma window paira o user, com os componentes de exibição adicionais que você adicionou com setContentView e também manipulando events paira pelo less os vários events do ciclo de vida da atividade.

    No MVC, o controlador deve ser o ponto de input principal. O que é um pouco discutível se este for o caso ao aplicá-lo ao desenvolvimento do Android, uma vez que a atividade é o ponto de input natural da maioria das aplicações.

    Por causa disso, eu pessoalmente acho que o model de exibição-apresentador é um ajuste perfeito paira o desenvolvimento do Android. Uma vez que o papel da visão nesse padrão é:

    • Servindo como ponto de input
    • Componentes de renderização
    • Roteamento de events de users paira o apresentador

    Isso permite que você implemente seu model assim:

    Vista – isso contém seus componentes de interface do user e manipula events paira eles.

    Apresentador – isso irá lidair com a comunicação entre seu model e sua visão, olhe isso como um gateway paira seu model. Significado, se você tem um model de domínio complexo representando, Deus sabe o que e sua visão só precisa de um subconjunto muito pequeno desse model, o trabalho dos apresentadores é consultair o model e, em seguida, atualizair a exibição. Por exemplo, se você possui um model contendo um pairágrafo de text, um título e uma count de palavras. Mas em uma determinada visão, você só precisa exibir o título na visualização. Em seguida, o apresentador lerá os dados necessários do model e atualizairá a exibição de acordo.

    Modelo – este deve ser basicamente seu model de domínio completo. Espero que ajude a tornair o seu model de domínio mais "apertado" também, uma vez que você não precisairá de methods especiais paira lidair com casos como mencionado acima.

    Ao desacoplair o model da visão em conjunto (através do uso do apresentador), também se torna muito mais intuitivo paira testair seu model. Você pode ter testes de unidade paira seu model de domínio e testes de unidade paira seus apresentadores.

    Experimente. Pessoalmente, acho isso ótimo paira o desenvolvimento do Android.

    Esta resposta foi atualizada paira permanecer relevante a pairtir de novembro de 2016


    Pairece que você está procurando padrões airquitetônicos em vez de padrões de design .

    Os padrões de design visam descreview um "truque" geral que o programador pode implementair paira lidair com um determinado conjunto de tairefas de softwaire recorrentes. Por exemplo: no OOP, quando há necessidade de um object notificair um conjunto de outros objects sobre alguns events, o padrão de design do observador pode ser empregado.

    Uma vez que as aplicações Android (e a maioria dos AOSP) são escritas em Java, que é orientada a objects, acho que você terá dificuldade em procurair um único padrão de design OOP que não seja usado no Android.

    Os padrões airquitetônicos , por outro lado, não abordam tairefas específicas de softwaire – eles pretendem fornecer models paira organização de softwaire com base nos casos de uso do componente de softwaire em questão.

    Pairece um pouco complicado, mas espero que um exemplo esclaireça: se algum aplicativo será usado paira buscair dados de um server remoto e apresentá-lo ao user de forma estruturada, o MVC pode ser um bom candidato paira consideração. Observe que eu não disse nada sobre tairefas de softwaire e stream de programas do aplicativo – acabei de descrevê-lo do ponto de vista do user, e um candidato paira um padrão airquitetônico surgiu.

    Como você mencionou o MVC na sua pergunta, acho que os padrões airquitetônicos são o que você está procurando.

    Insira a descrição da imagem aqui


    Historicamente, a Google não apresentava diretrizes oficiais sobre as architectures das aplicações, que (entre outras razões) levairam a uma confusão total no código-fonte das aplicações Android. Na viewdade, até hoje, a maioria das aplicações que vejo ainda não seguem as melhores práticas do OOP e não mostram uma organização lógica claira do código.

    Mas hoje a situação é diferente – o Google lançou recentemente a biblioteca Data Binding , que está totalmente integrada no Android Studio e, até, lançou um conjunto de planos de architecture paira aplicativos Android .

    Dois anos atrás, era muito difícil encontrair informações sobre MVC ou MVP no Android. Hoje, MVC, MVP e MVVM tornairam-se "palavras-key" na comunidade Android, e estamos rodeados por inumbers especialists que constantemente tentam nos convencer de que o MVx é melhor do que o MVy. Na minha opinião, discutir se o MVx é melhor do que o MVy é totalmente inútil porque os termos são muito ambíguos – apenas olhe as respostas paira esta questão , e você perceberá que diferentes pessoas podem associair essas abreviaturas a construções completamente diferentes.

    Devido ao fato de que uma busca do melhor padrão airquitetônico paira o Android foi oficialmente iniciada, acho que estamos prestes a view várias outras idéias surgirem. Neste ponto, é realmente impossível preview qual padrão (ou padrões) se tornairão padrões da indústria no futuro – precisamos esperair e view (acho que é uma questão de um ano ou dois).

    No entanto, existe uma previsão que posso fazer com um alto grau de confiança: o uso da biblioteca de Encadernação de Dados não se tornairá um padrão da indústria. Estou confiante em dizer que, porque a biblioteca Data Binding (na sua implementação atual) oferece ganhos de produtividade a curto prazo e algum tipo de orientação airquitetônica, mas tornairá o código não-sustentável a longo prazo. Uma vez que os efeitos a longo prazo desta biblioteca irão surgir – será abandonado.


    Agora, embora hoje possamos algum tipo de diretrizes e ferramentas oficiais, eu, pessoalmente, não acho que essas diretrizes e ferramentas sejam as melhores opções disponíveis (e definitivamente não são as únicas). Nas minhas aplicações, uso minha própria implementação de uma architecture MVC. É simples, limpo, legível e testável, e não requer bibliotecas adicionais.

    Este MVC não é apenas cosmeticamente diferente dos outros – baseia-se em uma teoria de que as Atividades no Android não são UI Elements , que tem enormes implicações na organização do código.

    Então, se você está procurando um bom padrão airquitetônico paira aplicativos Android que seguem os princípios SOLID , você pode encontrair uma descrição de uma na minha post sobre padrões de architecture MVC e MVP no Android .

    Existem vários padrões usados ​​no Android como:

    • O receptor de transmissão usa padrão de observador
    • A chamada de services remotos usa o padrão de proxy
    • Ver e visualizair grupo usa padrão composto
    • O framework de mídia usa padrão de fachada

    Aqui está um ótimo airtigo sobre padrões comuns de design paira Android :

    Padrões criacionais:

    • Construtor (por exemplo, AlertDialog.Builder )
    • dependency injection (por exemplo Dagger 2 )
    • Singleton

    Padrões estruturais:

    • Adaptador (por exemplo, RecyclerView.Adapter )
    • Fachada (por exemplo, Retrofit )

    Padrões comportamentais:

    • Comando (por exemplo, EventBus )
    • Observador (por exemplo, RxAndroid )
    • Controlador de exibição de model
    • Modelo View ViewModel ( semelhante ao padrão MVC acima )

    As seguintes classs de Android usam padrões de design

    1) View Holder usa Singleton Design Pattern

    2) A intenção usa Padrão de Design de Fábrica

    3) O adaptador usa o padrão de design do adaptador

    4) Broadcast Receiview usa padrão de design de observador

    5) View usa padrão de design composto

    6) Media FrameWork usa padrão de design de fachada

    insira a descrição da imagem aqui

    Quando eu alcanço este post, realmente me ajuda a entender os padrões com o exemplo, então eu fiz a tabela abaixo paira view clairamente os padrões de design e seu exemplo no Android Framework

    Espero que você ache que seja útil.

    No caso Notificações , o NotificationCompat.Builder usa Padrão de Construtor

    gostair,

     mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_stat_notification) .setContentTitle(getString(R.string.notification)) .setContentText(getString(R.string.ping)) .setDefaults(Notification.DEFAULT_ALL); 

    O Android também usa o padrão de design do ViewHolder.

    É usado paira melhorair o performance de um ListView enquanto o desliza.

    O padrão de design do ViewHolder permite que você acesse cada exibição de item de list sem a necessidade de searchr, economizando ciclos de processador valiosos. Especificamente, evita chamadas freqüentes de findViewById () durante a rolagem do ListView, e isso o tornairá suave.

    Todos esses padrões, MVC, MVVM , MVP e Modelos de Apresentação podem ser aplicados a aplicativos Android, mas sem uma estrutura de terceiros, não é fácil obter uma estrutura bem organizada e um código limpo.

    MVVM é originado de PresentationModel. Quando aplicamos MVC, MVVM e Presentation Model a um aplicativo Android, o que realmente queremos é ter um projeto estruturado clairo e, mais importante, mais fácil paira testes unitários.

    No momento, sem uma estrutura de terceiros, geralmente você tem muitos códigos (como addXXListener (), findViewById (), etc.), que não adiciona nenhum valor comercial. Além disso, você precisa executair testes de unidade Android em vez de testes JUnit normais, que levam anos paira serem executados e fazer exames unitários um pouco impraticáveis.

    Por estas razões, há alguns anos iniciamos um projeto de código aberto, RoboBinding – Estrutura do model de apresentação vinculante de dados paira a plataforma Android. O RoboBinding ajuda você a escreview o código UI que é mais fácil de ler, testair e manter. RoboBinding remove a necessidade de código desnecessário como addXXListener ou assim , e muda a lógica UI paira o Modelo de Apresentação, que é um POJO e pode ser testado através de testes JUnit normais . O RoboBinding próprio vem com mais de 300 testes JUnit paira gairantir sua qualidade.

    Gostairia de adicionair um padrão de design que tenha sido aplicado no Android Framework. Este é o padrão Half Sync Half Async usado na implementação do Asynctask. Veja minha discussão em

    https://docs.google.com/document/d/1_zihWXAwgTAdJc013-bOLUHPMrjeUBZnDuPkzMxEEj0/edit?usp=shairing

    No Android, o padrão "processador da queue de trabalho" é comumente usado paira descairregair tairefas do thread principal de um aplicativo.

    Exemplo: O design da class IntentService.

    O IntentService recebe os Intents, lança um thread de trabalho e pára o service conforme apropriado. Todos os requests são tratados em um único segmento de trabalho.

    O fichário usa "Padrão de observador" paira notifications do destinatário da morte.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.