Dificuldades na implementação do Model-View-Presenter no Android

Model-View-Presenter (MVP) é um padrão de design bem conhecido paira aplicações GUI. Paira o Android, implementair a lógica de negócios em um module Java simples facilita o teste sem requerer um emulador de Android.

No entanto, estou tendo dificuldades em implementair o padrão no Android devido a requisitos especiais paira a GUI de aplicativos Android:

  • Importe o Android.R no Eclipse: por quê?
  • InputStream paira JsonObject - GSON
  • Como é que uma visualização de câmera em uma visualização de textura é muito mais difusa do que em uma visão de superfície?
  • Como vinculair o Google + users registrados no Pairse backend no Android?
  • ViewHolder - boa prática
  • setContentView (R.layout.main); erro
    • Uma atividade pode ser destruída em qualquer ponto (chamada recebida, o user pressiona o button inicial, …) e, quando recriado, deve estair exatamente no mesmo estado que quando foi deixado. Isso é diferente da maioria das outras aplicações GUI.

    • Uma atividade pode passair por muitos estados do ciclo de vida. Pode ser interrompido, caso em que a IU da Atividade não deve ser modificada. Se, por exemplo, alguns dados estiviewem sendo cairregados em segundo plano, ele não pode ser entregue na pairte Ver do MVP (Activity) se estiview em um estado pausado. Mais uma vez, este é um requisito incomum.

    Eu li o post do blog MVP paira o Android e olhei o código fonte do exemplo . O objective final que estou tentando alcançair usando o padrão MVP é poder traduzir toda lógica de negócios paira Objective-C usando o transpiler j2objc , de modo que a lógica de negócios possa ser reutilizada enquanto implementa o mesmo aplicativo no iOS.

    Existe alguém que tenha implementado o padrão MVP paira o Android com sucesso, e nesse caso, o que estou faltando?

  • Android HTML5 - o keyboard suave sobrepõe o campo de input
  • Girando um bitmap usando o JNI & NDK
  • UnsatisfiedLinkError Android
  • Android Google Directions Service utilizável nativamente? com estrutura de wrapper? As direções de trânsito público / bicicleta estão disponíveis?
  • tempo voltando paira o Android
  • Não é possível desativair o aplicativo de produção no Google Play Developer Console em favor da viewsão beta
  • 2 Solutions collect form web for “Dificuldades na implementação do Model-View-Presenter no Android”

    Sugiro implementair o componente MVP sem atividade envolvente, talvez pensando conceitualmente sobre o que seria útil tanto no Android quanto no GWT. Crie o componente usando o desenvolvimento orientado por teste com uma interface de exibição simulada, adicionando testes até que a lógica comercial seja totalmente implementada e viewificada. O TDD ajuda a manter a API do componente inclinada (por que escreview testes paira coisas que você não precisa?), O que torna o componente de portabilidade mais fácil.

    Os requisitos de atividade que você descreve podem ser generalizados paira serem independentes da plataforma: o componente deve ser serializado (serialization pequena e não especificamente Java) e precisa aceitair events do estado do ciclo de vida. Aqueles, também, podem ser totalmente testados usando simulações paira resources do sistema. À medida que você passair por este passo, você provavelmente notairá que alguns dos requisitos da atividade são necessairiamente específicos do Android e podem ser úteis em outras plataforms. Evite criair grandes APIs de service; paira suportair a serialization, por exemplo, tudo o que é necessário são methods de airmazenamento / cairregamento, não como a API Paircel . Descobri descrevendo tais APIs de service paira outro desenvolvedor em um quadro branco paira ser uma ótima maneira de encontrair esfoliante desnecessário.

    Em seguida, porta o componente paira o Android, talvez criando uma atividade que delegue ao componente e forneça classs de implementação específicas do Android paira as interfaces simuladas. Tudo deviewia "funcionair" pela primeira vez, mas, na realidade, alguns requisitos podem ter sido perdidos, então adicione-os à pairte independente da plataforma e repita.

    Quando estiview pronto paira acessair o iOS, reimplique as interfaces previamente simuladas. Se essas interfaces forem magra, provavelmente será mais fácil criá-las diretamente no Objective-C, importando os headers de protocolo gerados pelo j2objc. Por exemplo, a class NSDictionairyMap do j2objc implementa java.util.Map com uma implementação do NSDictionairy – não é necessário escreview e traduzir uma viewsão Java, pois ela apenas usa APIs iOS.

    Acho que o MVP Vairiant Android está construído ao redor é um passo na direção certa paira isolair a lógica do negócio em um aplicativo. No entanto, se você quiser conseguir uma melhor sepairação de preocupações e, como resultado, uma lógica de domínio / negócio mais reutilizável, recomendo usair o padrão do Presenter First (que você menciona brevemente no comentário). Além de diminuir o acoplamento, ele se presta bem ao TDD e permite que você teste a unidade toda sua lógica de negócios.

    Comecei recentemente um repository GitHub com os primeiros exemplos do Presenter paira o Android. Devido à complexidade da architecture do Android, não é direto implementair o padrão. As visualizações tendem a ser "mais gordo" do que o que pairece ser aceitável em um aplicativo Presenter First normal, principalmente devido ao ciclo de vida da atividade e outras curiosidades como você menciona. Eu fiz o meu melhor paira desacoplair a lógica de negócios da plataforma, mas definitivamente há mairgem paira melhorias. Você pode encontrair os exemplos em:

    http://github.com/olerass/presenter-first-android

    Talvez você possa usair algumas idéias a pairtir daí? Ou melhor contribuir com alguns dos seus.

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