快速搭建一个简单的T-MVP项目
2017-04-23 16:26
691 查看
使用MVP框架来开发项目已经有一段时间了,越用越觉得它好用,模块清晰,后期也利于维护,关键是,如果从代码的角度看,每个文件的代码量少了,很少像以前一样,一个activity就几千行代码(夸张)。现在记录如何快速的搭建一个相对简单的MVP项目。
先看项目结构:
上面是整个项目的包结构。因为可能涉及多人开发,所以,建包的时候,除了base,util,view(自定义view),其他包以大模块分,比如假设一个项目有俩个大的功能,登录和注册,那除了上面三个包,还有2个模块包,login,register.然后各自的模块里才是具体的mvp的子包。详细如上图结构。
在开始真正动手写业务之前,应该先把基本的mvp框架建立起来,具体体现在base里面P和V接口的创建,以及V基类的创建。具体代码如下:
MVP中V的IBaseView接口:
MVP中P的IBasePresenter接口:
所有acitvity都要继承的BaseAcitivity:
BasePresenterAcitivity这个类最关键,它对P和V进行了关联和约束,具体如下:
以上P和V的接口和基类写完后,就可以开始具体业务模块mvp的搭建。对于具体模块,这里指大的模块里的具体业务,每个具体的业务,都有个契约类Contract,如这里的
LoginContract,它包含了M,V,P中所有的接口,代码如下:
如果在Android studio 中使用MVPHelper,可以很方便的完成上面这一步。并且在相对应的包下自动生成对应的model类和presenter类,MVPHelper的使用详见MVPHelper
最后看看,具体登录业务的V LoginActivity的实现,代码如下:
到这里,一个最基本的非常简单的T-MVP项目就搭建起来了,要扩展其他模块,使用其他技术也非常的方便。
先看项目结构:
上面是整个项目的包结构。因为可能涉及多人开发,所以,建包的时候,除了base,util,view(自定义view),其他包以大模块分,比如假设一个项目有俩个大的功能,登录和注册,那除了上面三个包,还有2个模块包,login,register.然后各自的模块里才是具体的mvp的子包。详细如上图结构。
在开始真正动手写业务之前,应该先把基本的mvp框架建立起来,具体体现在base里面P和V接口的创建,以及V基类的创建。具体代码如下:
MVP中V的IBaseView接口:
/** * Created by wjq on 2017/4/23. * MVP 中的接口V */ public interface IBaseView { }
MVP中P的IBasePresenter接口:
/** * Created by wjq on 2017/4/23. * MVP中的BasePresenter接口P */ public interface IBasePresenter<T extends IBaseView> { /** * 绑定View层 * @param view 需要实现IBaseView接口 */ void onViewAttached(T view); /** * 解绑View层 */ void onViewDetached(); /** * 用于解绑Model层 */ void onDestory(); }
所有acitvity都要继承的BaseAcitivity:
/** * Created by wjq on 2017/4/23. * 所有Activity的基类,对于所有Activity的初始化操作进行约束 */ public abstract class BaseAcitvity extends AppCompatActivity { public int layoutId; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); layoutId = getlayoutId(); setContentView(layoutId); initView(); onActivityCreate(savedInstanceState); } /** *获得界面的资源id */ protected abstract int getlayoutId(); /** *初始化界面 */ protected abstract void initView(); /** * 实现父类的onActivityCreate,完成Presenter的生成以及P和V的绑定 * @param paramBundle */ protected abstract void onActivityCreate(@Nullable Bundle paramBundle); }
BasePresenterAcitivity这个类最关键,它对P和V进行了关联和约束,具体如下:
/** * Created by wjq on 2017/4/23. * 所有的Activity继承该Activity,实现v和p的绑定 */ public abstract class BasePresenterAcitivity<P extends IBasePresenter<V>, V extends IBaseView> extends BaseAcitvity { /** * mPresenter是MVP中P对象,在Activity中可以使用该对象 **/ private P mPresenter; /** * @return 提供一个抽象的方法生成P对象,在子类中需要实现该方法 */ public abstract P createPresenter(); public P getPresenter() { return mPresenter; } public IBaseView getPresenterView() { return (V) this; } @Override protected void onActivityCreate(@Nullable Bundle paramBundle) { this.mPresenter = createPresenter(); this.mPresenter.onViewAttached((V) getPresenterView()); onPresenterCreate(paramBundle); } @Override protected void onDestroy() { //P和V解绑 this.mPresenter.onViewDetached(); super.onDestroy(); } /** * Activity的操作的入口,相当于原来的Activity的onCreate()方法 * * @param paramBundle */ public abstract void onPresenterCreate(@Nullable Bundle paramBundle); }
以上P和V的接口和基类写完后,就可以开始具体业务模块mvp的搭建。对于具体模块,这里指大的模块里的具体业务,每个具体的业务,都有个契约类Contract,如这里的
LoginContract,它包含了M,V,P中所有的接口,代码如下:
/** * Created by wjq on 2017/4/23. * 在契约类里面,可以MVP各个模块的接口,对接口进行统一管理,方便,清晰 */ public interface LoginContract { public interface View extends IBaseView { } public interface Presenter extends IBasePresenter<View> { } public interface Model { } }
如果在Android studio 中使用MVPHelper,可以很方便的完成上面这一步。并且在相对应的包下自动生成对应的model类和presenter类,MVPHelper的使用详见MVPHelper
最后看看,具体登录业务的V LoginActivity的实现,代码如下:
/** * Created by wjq on 2017/4/23. */ public class LoginActivity extends BasePresenterAcitivity<LoginContract.Presenter,LoginContract.View> implements LoginContract.View{ @Override public LoginContract.Presenter createPresenter() { return new LoginPresenterImpl(this); } @Override protected int getlayoutId() { return R.layout.activity_login; } @Override protected void initView() { } @Override public void onPresenterCreate(@Nullable Bundle paramBundle) { } }
到这里,一个最基本的非常简单的T-MVP项目就搭建起来了,要扩展其他模块,使用其他技术也非常的方便。
相关文章推荐
- mybaits入门---快速搭建一个简单的mybatis项目
- Arms是一个整合了大量主流开源项目的Android Mvp快速搭建框架
- 快速搭建一个简单的springboot项目
- Mondrian用于web项目的一个简单搭建实验
- 快速搭建一个简单的spring+maven工程
- eclipse+drools 6.5开发环境的搭建,以及创建一个简单的drools项目
- springboot入门,简单能跑的项目快速搭建
- 快速搭建好一个项目,你必须掌握这两步
- 发布一个开源项目,基于thinkphp框架搭建的一个简单框架
- 用idea和weblogic简单搭建一个web项目
- vue vuex vue-router vue-resource 简单的搭建一个 vue 小项目
- vue vuex vue-router vue-resource 简单的搭建一个 vue 小项目
- 使用idea搭建一个简单的SSM框架:(1)使用idea创建maven项目
- 一个简单的NetCore项目:1 - 搭建框架,生成数据库
- SSM做一个简单的网上商城-搭建项目
- 使用Spring MVC 、Spring、 Mybatis搭建一个简单的项目
- 如何快速搭建一个CakePHP项目
- Jenkins——如何快速搭建一个简单的基于 Jenkins 的持续集成环境
- 使用react-native做一个简单的应用-02项目搭建与运行
- spring-boot(2) - RESTfull API简单项目的快速搭建