当前位置: 首页 > news >正文

唐山炎黄宽带网站怎么自己做网站凑钱

唐山炎黄宽带网站,怎么自己做网站凑钱,烟台网站制作网站,邦邻网站建设熊掌号MVP架构简介 MVP(Model-View-Presenter)是一种常见的软件架构模式,尤其在Android应用开发中被广泛使用。它将应用程序分为三层:Model、View 和 Presenter,以实现职责分离,提高代码的可维护性和可测试性。 …

MVP架构简介

MVP(Model-View-Presenter)是一种常见的软件架构模式,尤其在Android应用开发中被广泛使用。它将应用程序分为三层:Model、View 和 Presenter,以实现职责分离,提高代码的可维护性和可测试性。

1. Model(模型)

  • 定义:负责处理应用程序的数据逻辑,包括与数据库、网络、API等数据源的交互。
  • 职责:提供数据,并将其返回给 Presenter,不涉及任何UI相关逻辑。

2. View(视图)

  • 定义:负责展示用户界面,接收用户的输入并将其传递给 Presenter。
  • 职责:展示由 Presenter 提供的数据,并根据用户操作调用 Presenter 的方法。View 层不直接处理逻辑,只展示内容。

3. Presenter(演示者)

  • 定义:作为 View 和 Model 之间的桥梁,负责处理逻辑和协调数据流。
  • 职责:
    • 从 View 接收用户输入,调用 Model 获取数据。
    • 将数据处理结果返回给 View 以更新UI。
    • Presenter 不直接操作UI,而是通过接口与 View 进行交互。

MVP与MVC的区别

1. 核心组成部分的区别

  • MVP
    • Model:负责数据逻辑的处理,类似于MVC中的Model。
    • View:展示数据、处理用户界面交互,但不会直接处理业务逻辑,所有逻辑都交给 Presenter。
    • Presenter:作为中间层,负责从 Model 获取数据并处理业务逻辑,然后将数据传递给 View。Presenter 直接与 View 交互。
  • MVC
    • Model:同样负责数据逻辑的处理,与 MVP 中的 Model 类似。
    • View:展示数据并处理用户输入,但可以直接与 Controller 进行交互。
    • Controller:控制器响应用户的输入,更新 Model 和 View,但它不直接操作 View,而是通知 View 自行更新。

2. 交互方式的区别

  • MVP
    • View 与 Model 之间没有直接交互。View 只负责调用 Presenter,Presenter 是唯一能与 Model 交互的部分,然后 Presenter 将结果返回给 View 来更新界面。
    • 双向交互:View 和 Presenter 是双向交互的,View 可以调用 Presenter,Presenter 也可以调用 View 来更新UI。
  • MVC
    • View 可以直接与 Model 交互。在MVC中,View可以直接从Model中获取数据,虽然一般情况下是通过Controller来协调。
    • 单向交互:View 和 Controller 之间的交互通常是单向的,用户的输入会通过 View 传递给 Controller,Controller 再更新 Model,最后通知 View 更新UI。

3. 视图的控制权

  • MVP
    • Presenter 控制视图:在MVP模式中,Presenter 负责处理所有业务逻辑,并决定何时以及如何更新 View。View 不进行逻辑处理,只是被动地展示数据。
  • MVC
    • Controller 充当中介:在MVC中,Controller 只是起到协调作用,它不会主动控制 View 的更新,通常会将新的数据传递给 View 或通知 View 进行自我更新。

MVP架构优点

  1. View层与Model层完全分离

  2. 所有View层 和 Model层 逻辑交互都在Presenter

  3. 后续扩展性/可维护性强,M层(负责数据业务模型), P层(负责M层与V层的交互逻辑)

  4. 定位修改Bug方便:

    如果是修改界面交互相关的,直接找V层修改

    如果是修改数据业务逻辑,直接找M层修改

image-20241018141154575

MVP架构特点

关系:

  1. View收到用户的操作

  2. View把用户的操作,交给Presenter

  3. Presenter直接操作Model进行业务逻辑处理

  4. Model处理完毕后,通知Presenter

  5. Presneter收到通知后,在去更新View

方式:

是双向的通信方式

优点:

  1. View层与Model层完全分离
  2. 所有的逻辑交互都在Presenter
  3. MVP分层较为严谨

image-20241018141452545

image-20241018165112763

示例

  1. Model (数据层)

Model 负责处理数据逻辑,判断用户名和密码是否正确。

public class LoginModel {// 模拟用户登录数据public boolean validateUser(String username, String password) {// 简单模拟,假设用户名为"user",密码为"password"时登录成功return username.equals("user") && password.equals("password");}
}
  1. View (视图层)

View 负责显示界面,并将用户的输入传递给 Presenter,它不会直接处理业务逻辑。

public interface LoginView {// 展示登录成功的信息void showLoginSuccess();// 展示登录失败的信息void showLoginError();// 获取用户名String getUsername();// 获取密码String getPassword();
}

具体实现:

public class LoginActivity extends AppCompatActivity implements LoginView {private EditText usernameEditText, passwordEditText;private Button loginButton;private LoginPresenter presenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);usernameEditText = findViewById(R.id.username);passwordEditText = findViewById(R.id.password);loginButton = findViewById(R.id.login_button);presenter = new LoginPresenter(this, new LoginModel());loginButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {presenter.onLoginClicked();}});}@Overridepublic void showLoginSuccess() {Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();}@Overridepublic void showLoginError() {Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show();}@Overridepublic String getUsername() {return usernameEditText.getText().toString();}@Overridepublic String getPassword() {return passwordEditText.getText().toString();}
}
  1. Presenter (逻辑层)

Presenter 负责处理业务逻辑,并将数据从 Model 传递到 View。

public class LoginPresenter {private LoginView view;private LoginModel model;public LoginPresenter(LoginView view, LoginModel model) {this.view = view;this.model = model;}// 当用户点击登录按钮时调用public void onLoginClicked() {String username = view.getUsername();String password = view.getPassword();// 通过 Model 验证用户输入if (model.validateUser(username, password)) {view.showLoginSuccess();} else {view.showLoginError();}}
}
  1. 布局文件 (activity_login.xml)

简单的登录界面,包含输入框和按钮。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><EditTextandroid:id="@+id/username"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="用户名" /><EditTextandroid:id="@+id/password"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="密码"android:inputType="textPassword" /><Buttonandroid:id="@+id/login_button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="登录" />
</LinearLayout>

工作流程:

  1. 用户在 LoginActivity 中输入用户名和密码并点击登录按钮。
  2. LoginActivity 作为 View 层,将用户输入传递给 LoginPresenter
  3. LoginPresenter 从 View 获取用户名和密码,并调用 LoginModel 来验证用户输入。
  4. LoginModel 验证输入是否正确,然后将结果返回给 LoginPresenter
  5. LoginPresenter 根据验证结果通知 LoginActivity 更新UI,显示登录成功或失败的消息。

已经到底啦!!

http://www.yayakq.cn/news/126153/

相关文章:

  • 卫浴响应式外贸网站建设学做网站快吗
  • 做一款小说网站东莞市网络公司
  • 网站专题分类标识设计图片
  • 做创意美食的视频网站有哪些企业网网页
  • 玛纳斯县住房和城乡建设局网站广告推广平台代理
  • 织梦医疗网站今晚比分足球预测
  • 苏州企业网站建设设计制作公司建设网站要什么手续
  • 网站关键词优化培训烟台市芝罘区建设局网站
  • 便宜的seo网站优化排名厦门国外网站建设公司排名
  • 网站策划文案怎么做死循环网站
  • 沙井网站建设公司2021年11月最新新闻热点事件
  • 怎么在网站上做排名免费制作链接平台
  • 南昌网站seo公司萍乡招聘网站建设
  • 厦门 做网站辽宁建筑网
  • 网站类网站开发教程南宁seo网站建设费用
  • 小视频网站开发流程企业管理软件a6
  • 做彩票的网站吗网页设计代码太多
  • 网站空间和数据库重庆市建设工程质量信息网
  • php装修网站源码品质好可以说成品质什么
  • 什么是软文营销网站自然优化是什么意思
  • 网站开发维护承担的法律责任中国制造网入驻
  • 湖南汽车软件网站建设手工小制作 小学生
  • 建网站赚钱惠州网
  • 松江郑州阳网站建设闵行区网站开发
  • 怎么做网站访问被拒绝包头市建设工程质量监督站网站
  • 企业网站备案需要什么wordpress toc
  • 什么类型的网站容易做三乡网站开发
  • 优秀企业门户网站seo链接提交入口
  • 长沙公司网站建设网站报价明细表
  • 网站模板佳好乐云seo零基础学习做网站