当前位置:首页 » 安卓系统 » androidmvp架构

androidmvp架构

发布时间: 2023-02-04 00:08:33

⑴ 如何实现自己的Android MVP框架

MVP模式可以分离显示层和逻辑层,所以功能接口如何工作与功能的展示可以实现分离,MVP模式理想化地可以实现同一份逻辑代码搭配不同的显示界面。首先要澄清就是MVP不是一个结构化的模式,它只是负责显示层而已,任何时候都可以在自己的项目结构中使用MVP模式。

⑵ Android 中 MVC、MVP 和 MVVM 对比

MVC、MVP和MVVM是常见的三种架构设计模式,当前MVP和MVVM的使用相对比较广泛,当然MVC也并没有过时之说。

MVC (Model-View-Controller, 模型-视图-控制器),标准的MVC是这个样子的:

简述:

缺点:

MVP (Model-View-Presenter) 是MVC的演化版本,几个主要部分如下:

简述:

解释:

优点:

缺点:

MVVM 是 Model-View-ViewModel 的简写。和 MVP 模式相比,MVVM 模式用 ViewModel 替换了 Presenter ,其他层基本上与 MVP 模式一致,ViewModel 可以理解成 是 View 的数据模型和 Presenter 的合体。MVVM 就是将其中的 View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。

简述:

缺点:

参考:

⑶ 如何一步一步实现Android的MVP框架

实现Android MVP框架

一个经典的 Android MVC 框架项目的代码结构

⑷ 如何实现自己的Android MVP框架

前言MVP作为一种MVC的演化版本在Android开发中受到了越来越多的关注,但在项目开发中选择一种这样的软件设计模式需保持慎重心态,一旦确定使用MVP作为你App的开发模式那么你就最好坚持做下去,如果在使用MVP模式开发过程中发现问题而且坑越来越大,这时你想用MVC等来重新设计的话基本上就等于推倒重来了。要知道在Android上MVP在现在为止并没有统一的标准或者框架,不像SSH这三个成熟稳重强而有力的三剑客支持推动着javaEE的开发,所以在运用MVP时一定要做好自己的理解,并且尽量预知自己App各模块的需求(客户说改改改,我们就改改改:-()以便提前做好充分的设计工作。当然MVP既然能出现那么必然有它的优点的,不然谁会理会这个冒出来的东西,下面就对Android中MVP做一些阐述。MVP简介相信大家对MVC都是比较熟悉了:M-Model-模型、V-View-视图、C-Controller-控制器,MVP作为MVC的演化版本,也是作为用户界面(用户层)的实现模式,那么类似的MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。从MVC和MVP两者结合来看,Controlller/Presenter在MVC/MVP中都起着逻辑控制处理的角色,起着控制各业务流程的作用。而MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系,这两者之间间隔着的是Presenter层,其负责调控View与Model之间的间接交互,MVP的结构图如下所示,对于这个图理解即可而不必限于其中的条条框框,毕竟在不同的场景下多少会有些出入的。在Android中很重要的一点就是对UI的操作基本上需要异步进行也就是在MainThread中才能操作UI,所以对View与Model的切断分离是合理的。此外Presenter与View、Model的交互使用接口定义交互操作可以进一步达到松耦合也可以通过接口更加方便地进行单元测试。MVP结构图MVP之ModelModel是用户界面需要显示数据的抽象,也可以理解为从业务数据(结果)那里到用户界面的抽象(Businessrule,dataaccess,modelclasses)。本文Demo为了简单处理就直接把业务放到了对应的Model之中。MVP之View视图这一层体现的很轻薄,负责显示数据、提供友好界面跟用户交互就行。MVP下Activity和Fragment体现在了这一层,Activity一般也就做加载UI视图、设置监听再交由Presenter处理的一些工作,所以也就需要持有相应Presenter的引用。例如,Activity上滚动列表时隐藏或者显示Acionbar(Toolbar),这样的UI逻辑时也应该在这一层。另外在View上输入的数据做一些判断时,例如,EditText的输入数据,假如是简单的非空判断则可以作为View层的逻辑,而当需要对EditText的数据进行更复杂的比较时,如从数据库获取本地数据进行判断时明显需要经过Model层才能返回了,所以这些细节需要自己掂量。MVP之PresenterPresenter这一层处理着程序各种逻辑的分发,收到View层UI上的反馈命令、定时命令、系统命令等指令后分发处理逻辑交由业务层做具体的业务操作,然后将得到的Model给View显示。演示demo动手写起代码来才有更好的感觉。demo很简单,还是上个图更直观,输入城市的代号,点击按钮获取城市的天气信息然后显示出来,网络操作使用Volley框架,解析用Gson,其它的就手写了。整个项目的包设计如下:包结构项目效果预览包图中明显的三层:Model包、Presenter包、UI包,其中,三者都实现各自的结构,Model为WeatherModel、Presenter为WeatherPresenter、View为Weather,那么具体实现类就是impl包里的了,View层的即为Activity。此外的app和util包无关紧要可以不看。可以看到采用MVP设计后项目明显多了很多东西,这也是不可避免的,使用原始方法可以使项目开起来简单些但是以后还有维护呢、测试呢、加功能呢、。。。entity里的实体属性基本上对应json里的这些属性了,代码不贴了View里面的接口:publicinterfaceWeatherView{voidshowLoading();voidhideLoading();voidshowError();voidsetWeatherInfo(Weatherweather);}WeatherPresenter的接口:{/***获取天气的逻辑*/voidgetWeather(StringcityNO);}WeatherModel接口:publicinterfaceWeatherModel{voidloadWeather(StringcityNO,OnWeatherListenerlistener);}prestener里面还有个OnWeatherListener,其在Presenter层实现,给Model层回调,更改View层的状态,确保Model层不直接操作View层。如果没有这一接口在WeatherPresenterImpl实现的话,WeatherPresenterImpl只有View和Model的引用那么Model怎么把结果告诉View呢?当然这只是一种解决方案,在实际项目中可以使用Dagger、EventBus、Otto等第三方框架结合进来达到更加松耦合的设计。{/***成功时回调**@paramweather*/voidonSuccess(Weatherweather);/***失败时回调,简单处理,没做什么*/voidonError();}所以demo的代码流程:Activity做了一些UI初始化的东西并需要实例化对应WeatherPresenter的引用和实现WeatherView的接口,监听界面动作,Go按钮按下后即接收到查询天气的事件,在onClick里接收到即通过WeatherPresenter的引用把它交给WeatherPresenter处理。WeatherPresenter接收到了查询天气的逻辑就知道要查询天气了,然后把查询天气的具体业务实现交给WeatherModel去实现同时把WeatherListener即WeatherPresenter自己传给WeatherModel。WeatherModel进行查询天气业务后即把结果通过WeatherListener回调通知WeatherPresenter,WeatherPresenter再把结果返回给View层的Activity,最后Activity显示结果。就这样,拍砖之处请拍。End采用哪种软件设计模式都是为了达到如下目的,找到合适的加以运用就是最好的:易于维护易于测试松耦合度复用性高健壮稳定------------------------------------------------------------------------------------以上内容均参考互联网,希望以上知识对您有所帮助,

⑸ Android MVP架构中的Presentation层应该怎么设计

先区分一下Android View、View、界面的区别
Android View: 只是继承android.view.View的Android组件。
View:接口,用于由presenter向View实现类通信,你可以在Android组件中实现它。有时最好直接使用Activity,Fragment或自定义View。
界面:界面是面向用户的概念。比如要在手机上进行界面间切换时,我们在代码中可以通过多种方式实现,如Activity到Activity或一个Activity内部的Fragment/View进行切换。所以这个概念基于用户的视觉,包括了所有View中能看到的东西。
切换界面
界面间的切换可以是两个Fragment、两个Activity、打开对话框、启动新Activity等等。当然切换的具体实现原理不属于这篇文章的内容,而进行切换操作则是Presentation层的职责。Presenter应该知道要做什么,而它的实现类要知道怎么完成。在这个例子中,要做的就是切换界面,完成方式就是启动新的Activity。
但这样会有一个问题。Presentation层是纯java代码,所以Presenter中不应该有任何与安卓相关的代码。那怎么完成界面的切换呢?通过抽象。这里可以写一个只有一个navigate()方法的接口NavigationCommand。在需要时我们在Presenter中调用这个接口的navigate()方法,然后在Activity中实现这个接口。
代码长这样:
View层
ActivityA.java
public class ActivityA extends Activity {
@OnClick(R.id.someButton)
public void onSomeButtonClicked() {
presenter.onSomeButtonClicked();

}
ToActivityB.java
public class ToActivityB implements NavigationCommand {
private final Activity currentActivity;

public ToActivityB(Activity activity) {
currentActivity = activity;
}

@Override
public void navigate() {
currentActivity.startActivity();
}

}
Presentation层
NavigationCommand.interface
public interface NavigationCommand {
public void navigate();

}
PresenterA.java
public class PresenterA {
private final NavigationCommand toBNavigation;

public PresenterA(NavigationCommand toBNavigation) {
this.toBNavigation = toBNavigation;
}

public void onSomeButtonClicked() {
toBNavigation.navigate();
}

}
这样我们就可以将VP两层解耦。这里将切换到一个Activity的代码提取出来,可以复用,我们可以通过注入NavigationCommand方法来测试Presenter,而且就算要跳转的页面变了,Presenter的代码也不变。这也符合Open Close原则。
另一个问题就是当一个Presenter中出现多个NavigationCommand时,构造方法就开始变得诡异了。
public class PresenterA {
private final NavigationCommand toBNavigation;
private final NavigationCommand toCNavigation;

public PresenterA(NavigationCommand toBNavigation, NavigationCommand toCNavigation) {
this.toBNavigation = toBNavigation;
this.toCNavigation = toCNavigation;
}

}
在这里初始化Presenter的类很难搞清楚两个NavigationCommand之间的顺序,似乎只能通过名字来辨识,这里其实可以再写一个接口继承NavigationCommand来专门管理一类特定的切换,或者如果你使用依赖注入框架的话也可以指定参数的类型。
有时需要在切换界面时传递一些参数,这时就要改动一下NavigationCommand的代码:
public interface ToScreenBNavigationCommand extends NavigationCommand {

void setMyParameterToNavigate(String parameter);

}

⑹ 如何使用MVP架构搭建Android应用程序

Afinal是一个Android的IOC,ORM框架,内置了四大模块功能:FinalAcitivity, FinalBitmap, FinalDb, FinalHttp。通过FinalActivity,可以通过注解的方式进行绑定UI和事件。通过FinalBitmap,可以方便的加载Bitmap图片,而无需考虑OOM等问题。通过FinalDB模块,通过一行代码就可以对Android的SQlite数据库进行增删改查。通过FinalHttp模块,可以以Ajax形式请求Http数据。

⑺ Android MVP架构中的Presentation层应该怎么设计

对于MVP(Model View Presenter),大多数人都能说出一二:“MVC的演化版本”,“让Model和View完全解耦”等等。本篇博文仅是为了做下记录,提出一些自己的看法,和帮助大家如何针对一个Activity页面去编写针对MVP风格的代码。
对于MVP,我的内心有一个问题:
为何这个模式出来后,就能被广大的Android的程序员接受呢?
问了些程序员,他们对于MVP的普遍的认识是:“代码很清晰,不过增加了很多类”。我在第一次看到MVP的时候,看了一个demo,看完以后觉得非常nice(但是回过头来,自己想个例子写,就头疼写不出来,当然这在后文会说)。nice的原因还是因为,这个模式的确让代码的清晰度有了很大的提升。
那么,提升一般都是对比出来的,回顾下,没有应用MVP的代码结构。很多人说明显是MVC么:
View:对应于布局文件
Model:业务逻辑和实体模型
Controllor:对应于Activity
看起来的确像那么回事,但是细细的想想这个View对应于布局文件,其实能做的事情特别少,实际上关于该布局文件中的数据绑定的操作,事件处理的代码都在Activity中,造成了Activity既像View又像Controller(当然了Data-Binder的出现,可能会让View更像View吧)。这可能也就是为何,在该文中有一句这样的话:
Most of the modern Android applications just use View-Model architecture,everything is connected with Activity.
而当将架构改为MVP以后,Presenter的出现,将Actvity视为View层,Presenter负责完成View层与Model层的交互。现在是这样的:
View 对应于Activity,负责View的绘制以及与用户交互
Model 依然是业务逻辑和实体模型
Presenter 负责完成View于Model间的交互
ok,先简单了解下,文中会有例子到时候可以直观的感受下。

⑻ Android Architecture(中文官方文档)——MVVM、DataBinding、Lifecycle、Room、LiveData

官方文档地址: https://developer.android.google.cn/jetpack/docs/guide

Android Architecture推荐使用MVVM架构:

其中,文档中特别提到了:

简单来说, 并不是 说MVVM就是最好的结构,而是好的架构必须满足以下两点:

个人理解只是换了种说法,实质上和之前的MVC、MVP架构一样,最终目标还是为了满足 程序设计六大原则 。一个好的结构设计,必然是 低耦合、高内聚、易于测试和维护 的。不管是MVC,MVP还是MVVM,其目标都是一致的。

⑼ Android:一个完整app开发流程

可选MVP,MVVM

本app基于mvp架构。除了mvp架构的文件。
还包含下面的文件夹
ui (下面根据Activity划分)
widget (自定义dialog等)
base (BaseActivity,BaseFragment)

有侧滑栏,tab的一般用fragment

设置sw-360dp,sw-480dp等不同的dimension目录,根据百分比计算dp值。

bindview使用butterknife,不同组件通信使用EventBus,定时使用RxJava,崩溃收集bugly

按钮样式:
使用selector

按钮背景色,包括颜色和圆角

使用ConstraintLayout,直接使用标注的值来做,最简单,不要用百分比。使用layout_constraint,layout_margin完成所有布局。

在AndroidStudio直接肉眼布局,Android可以选择不同的分辨率机器,水平或者垂直进行预览

配置sdk版本
配置abi

使用蓝湖进行图片的协助。提供m,h,x,xx等不同分辨率的图片

⑽ Android MVP架构思想和实现

MVP Demo地址戳这里👇

热点内容
符号源码 发布:2024-05-07 06:26:09 浏览:706
玩hypixel服务器ip地址要什么版本 发布:2024-05-07 06:22:50 浏览:61
代码为什么要编译 发布:2024-05-07 06:22:48 浏览:494
java面试复习 发布:2024-05-07 06:01:15 浏览:658
suftp 发布:2024-05-07 06:00:40 浏览:880
编程的tr 发布:2024-05-07 05:37:25 浏览:423
苹果4s的数据怎么备份到安卓上 发布:2024-05-07 05:37:15 浏览:819
安卓怎么注册电邮 发布:2024-05-07 05:23:49 浏览:715
怎么看清被涂鸦的内容安卓手机 发布:2024-05-07 05:16:52 浏览:703
配置业务分类时主要考虑哪些原因 发布:2024-05-07 05:12:40 浏览:186