android 包结构,Android MVP模式包结构

我只是在这里重新发布我的答案

我经常将业务逻辑代码放在模型层中 (不要与数据库中的模型混淆)。 我经常将其重命名为XManager以避免混淆(例如ProductManager , MediaManager …),因此演示者类仅用于保持工作流程。

经验法则是没有或至少限制在演示者类中导入android包 。 这个最佳实践支持您更轻松地测试presenter类,因为presenter现在只是一个普通的java类,所以我们不需要android框架来测试这些东西。

例如,这是我的mvp工作流程。

视图类 :这是一个存储所有视图的地方,例如按钮,textview ……并且您可以在此图层上为这些视图组件设置所有侦听器。 同样在此视图上,您​​可以稍后为演示者实现定义一个Listener类。 您的视图组件将调用此侦听器类上的方法。

class ViewImpl implements View { Button playButton; ViewListener listener; public ViewImpl(ViewListener listener) { // find all view this.listener = listener; playButton.setOnClickListener(new View.OnClickListener() { listener.playSong(); }); } public interface ViewListener { playSong(); } }

Presenter类:这是您在其中存储视图和模型以便稍后调用的地方。 另外presenter类将实现上面定义的ViewListener接口。 演示者的要点是控制逻辑工作流程。

class PresenterImpl extends Presenter implements ViewListener { private View view; private MediaManager mediaManager; public PresenterImpl(View, MediaManager manager) { this.view = view; this.manager = manager; } @Override public void playSong() { mediaManager.playMedia(); } }

Manager类:这是核心业务逻辑代码。 也许一位主持人会有很多经理(取决于观点的复杂程度)。 通常我们通过一些注入框架(如Dagger获取Context类。

Class MediaManagerImpl extends MediaManager { // using Dagger for injection context if you want @Inject private Context context; private MediaPlayer mediaPlayer; // dagger solution public MediaPlayerManagerImpl() { this.mediaPlayer = new MediaPlayer(context); } // no dagger solution public MediaPlayerManagerImpl(Context context) { this.context = context; this.mediaPlayer = new MediaPlayer(context); } public void playMedia() { mediaPlayer.play(); } public void stopMedia() { mediaPlayer.stop(); } }

最后:将这些内容放在“活动”,“碎片”中……这是您初始化视图,管理器并将所有内容分配给演示者的位置。

public class MyActivity extends Activity { Presenter presenter; @Override public void onCreate() { super.onCreate(); IView view = new ViewImpl(); MediaManager manager = new MediaManagerImpl(this.getApplicationContext()); // or this. if you use Dagger MediaManager manager = new MediaManagerImpl(); presenter = new PresenterImpl(view, manager); } @Override public void onStop() { super.onStop(); presenter.onStop(); } }

您会看到每个演示者,模型,视图都由一个界面包装。 这些组件将通过接口调用。 此设计将使您的代码更加健壮,以后更容易修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值