V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LinkZhang
V2EX  ›  Android

关于 Android MVP 的一些疑惑,求解答

  •  
  •   LinkZhang · 2016-04-12 22:12:46 +08:00 · 10301 次点击
    这是一个创建于 3179 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在尝试用 MVP 架构重构项目,遇到一个疑惑,求解答

    一个注册业务逻辑分三步对应三个界面,后面的步骤都依赖前一步返回的数据,建立 presenter 的时候有 2 种方法

    • 对应不同界面分别创建 presenter
    • 把所有逻辑写在一个 presenter 里面

    尝试方法一,传递数据的时候要先把数据传递给 view,再通过 view 传递给下一个 presenter ,数据和视图耦合了

    尝试方法二,必须保证每个界面获取同一个 presenter 实例,似乎要把 presenter 写成单例

    不知道大家有没有更好的解决方法?

    6 条回复    2016-04-13 09:47:19 +08:00
    anthonyeef
        1
    anthonyeef  
       2016-04-12 22:46:03 +08:00
    TVBG
        2
    TVBG  
       2016-04-12 22:50:46 +08:00
    要看具体的情况,不过应该可以考虑把数据放到 Model 里面。
    nekocode
        3
    nekocode  
       2016-04-12 22:51:16 +08:00
    你方法一描述得不够仔细,无法看出具体的问题,不过你可以参考下这个帖子 https://www.reddit.com/r/androiddev/comments/3lx99j/mvp_where_to_put_activity_intent

    帖子表达的意图很清楚:页面之间跳转是应该在 View 层实现的。

    另外方法二是不推荐的,通常 View 与 Presenter 是一对一或一对多的关系,你把 Presenter 设计成单例的话, Presenter 的生命周期就在各个 View 之上了,处理不小心的话很容易造成内存泄漏。
    Yasic
        4
    Yasic  
       2016-04-12 23:36:32 +08:00
    个人一般遵循 “一个 presenter 对应一个 view ” 的原则,至于传递数据,具体是哪种情况需要把数据先传给 view 再传给下一个 presenter ? view 只应该跟对应的 presenter 通信
    LinkZhang
        5
    LinkZhang  
    OP
       2016-04-13 06:53:20 +08:00 via iPhone
    @Yasic 第一步需要请求服务器获取 token ,后面的请求都要使用这个 token ,如何把 token 传递给后面的 present 呢
    Yasic
        6
    Yasic  
       2016-04-13 09:47:19 +08:00
    @LinkZhang 这种在 app 运行周期里“多次访问少量更新”的数据一般会采取本地存储( SharedPreferences ,数据库, contentprovider 。。)或者静态资源访问的方式,类似于这里讨论的 https://www.v2ex.com/t/264641#reply8
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 14:35 · PVG 22:35 · LAX 06:35 · JFK 09:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.