看懂 Android Studio MVP 模板生成的目录结构injection、presenter、interactor、view 各管什么【免费下载链接】Android-Studio-MVP-templateAndroid MVP template for Android Studio项目地址: https://gitcode.com/gh_mirrors/an/Android-Studio-MVP-templateAndroid-Studio-MVP-template 是一个面向 Android Studio 的MVP 模板只需在 IDE 中点几下鼠标就能自动生成一套规范的 MVP 工程骨架。很多新手装完模板后看到生成的injection、presenter、interactor、view四个包会一头雾水——每个包到底放什么类类与类之间怎么协作本文带你5 分钟看懂这套目录结构的设计思路。一键生成先认识三个模板安装后在 Android Studio 的New菜单中会出现一个MVP分类包含三个模板模板作用使用时机MVP Boilerplate生成项目级基础类基类、注入容器、Presenter 保活工具每个项目只用一次在根包目录上执行MVP Activity生成一个完整的 MVP 页面Activity 版每新建一个页面执行一次MVP Fragment生成一个完整的 MVP 页面Fragment 版每新建一个 Fragment 页面执行一次⚠️ 三个模板都要在根包root package目录下创建否则会在子包里重复生成整套目录破坏结构一致性。生成的目录全景图以创建Main页面为例模板会在包下生成如下结构完整说明见 README.md 中的 Hierarchy 部分com.company.app ├── injection // Dagger 2 依赖注入 │ ├── ActivityScope / FragmentScope // 作用域注解 │ ├── AppComponent / AppModule // 应用级容器与模块 │ ├── MainViewComponent // 页面级容器 │ └── MainViewModule // 页面级模块 ├── interactor // 数据层接口 实现 │ ├── impl/ │ │ └── MainViewInteractorImpl │ ├── BaseInteractor │ └── MainViewInteractor ├── presenter // 业务逻辑层接口 实现 │ ├── impl/ │ │ ├── BasePresenterImpl │ │ └── MainViewPresenterImpl │ ├── BasePresenter │ └── MainViewPresenter └── view // 视图层接口 实现 ├── impl/ │ ├── BaseActivity │ ├── BaseFragment │ └── MainActivity ├── MainView └── YourApp // Application 类对应地生成规则就写在三个模板的配方文件里例如 recipe.xml.ftl 中逐条声明了每个.java.ftl模板要输出到哪个子包。view 层只描述页面长什么样、显示什么view包分两部分MainView接口定义页面需要呈现的内容和行为比如showData()、showError()。接口带UiThread注解提醒调用方必须在主线程操作 UI。模板源文件View.java.ftlimpl/MainActivity实现继承BaseActivity实现MainView接口负责setContentView和控件绑定。这里不写业务逻辑只做Presenter 说了什么我就展示什么。BaseActivity/BaseFragment是模板预置的基类帮你完成了 Presenter 的加载、绑定与解绑。presenter 层业务逻辑的大脑presenter是 MVP 的核心同样是接口 实现双层MainPresenter接口继承BasePresenter声明页面需要的业务操作。impl/MainPresenterImpl实现继承BasePresenterImpl处理用户事件、调用 Interactor 取数据、再驱动 View 刷新。通过mView变量访问视图通过构造函数注入的mInteractor访问数据。模板还内置了一个关键能力Presenter 在屏幕旋转后存活。它借助 AndroidLoader机制实现由 PresenterLoader.java.ftl 和 PresenterFactory.java.ftl 完成。由此带来几条新手最容易踩坑的生命周期规则时机规则onCreate/onResume中不要直接用mPresenter此时它可能还是 null异步加载onStart中mView保证非空用viewCreated参数判断是否旋转后重建为 true 时应按 Presenter 状态刷新界面onStop中不要停掉后台请求视图下次可能还活着onPresenterDestroyed中必须取消 HTTP 请求、关闭数据库等后台操作Presenter 就此终结这些回调的详细说明见 BasePresenter.java.ftl。interactor 层数据的仓库管理员interactor负责所有数据获取网络请求、数据库读写、本地缓存等。MainViewInteractor接口声明数据接口如获取用户列表。impl/MainViewInteractorImpl实现真正去调网络、读库构造函数带Inject注解交给 Dagger 2 管理。Presenter 只依赖 Interactor 的接口因此单元测试时可以轻松换成假的实现——这正是 MVP 分层最大的好处。模板源文件Interactor.java.ftl 与 InteractorImpl.java.ftl。injection 层Dagger 2 的装配车间injection包是纯依赖注入代码页面逻辑不写在这里MainViewComponentComponent页面级的依赖容器负责把 Interactor、Presenter 装配后inject到 Activity。见 Component.java.ftlMainViewModuleModule用Provides声明Interactor 用哪个实现、Presenter 用哪个工厂创建。见 Module.java.ftlAppComponent/AppModule应用级容器由 MVP Boilerplate 模板生成所有页面容器都挂在它下面ActivityScope/FragmentScope作用域注解保证同一页面生命周期内拿到的是同一个实例四个包的协作关系一句话总结View 收事件并展示结果 → Presenter 处理业务、调度数据 → Interactor 负责取数 → Injection 把三者自动拼装起来。每个页面只需关心自己包下的 8 个类接口各 4 个 实现各 4 个基类、注入容器和 Presenter 保活机制全部由模板预先搞定。常见疑问 FAQQ1为什么 Interactor 和 Presenter 都有接口 impl两份面向接口编程接口是契约实现可随时替换真实实现 / 测试假实现也是 Dagger 2 注入的前提。Q2MVP 和 MVP 数据层Interactor有什么差别传统 MVP 里 Presenter 直接调网络导致它又胖了加入 Interactor 后Presenter 专注业务编排数据逻辑独立可测这正是本模板遵循的结构。Q3模板要求什么前置依赖需要项目集成Dagger 2依赖注入和AppCompat注解与基类缺一不可。小结viewUI 呈现无业务逻辑presenter业务调度且能扛住屏幕旋转interactor数据获取可独立替换与测试injectionDagger 2 自动装配前两者理解了这个目录结构你在 Android Studio 里点下 MVP 模板按钮后生成的每一个类住在哪、干什么、和谁打交道就都清清楚楚了。接下来动手新建一个页面试着在四个包里各填一个方法感受一次数据从 Interactor 到 View 的完整流转吧【免费下载链接】Android-Studio-MVP-templateAndroid MVP template for Android Studio项目地址: https://gitcode.com/gh_mirrors/an/Android-Studio-MVP-template创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考