【CodeGPT帮我理解 MVC MVP 和 MVVM】

以天气预报APP为例理解MVC MVP 和 MVVM

CodeGPT的回答

在Android Studio中打开CodeGPT,并问他 :天气预报APP用MVC、MVP和MVVM分别怎么写?

MVC

// Model(模型)
public class WeatherModel {
    private String weatherData;

    public void setWeatherData(String data) {
        this.weatherData = data;
    }

    public String getWeatherData() {
        return weatherData;
    }
}

// View(视图)
public class WeatherView {
    public void displayWeather(String weatherData) {
        System.out.println("当前天气:" + weatherData);
    }
}

// Controller(控制器)
public class WeatherController {
    private WeatherModel model;
    private WeatherView view;

    public WeatherController(WeatherModel model, WeatherView view) {
        this.model = model;
        this.view = view;
    }

    public void updateWeather(String data) {
        model.setWeatherData(data);
        view.displayWeather(model.getWeatherData());
    }
}

在MVC中,控制器(Controller)负责处理用户的输入并更新模型(Model)和视图(View),控制器(Controller)直接与视图(View)交互

MVP

// Model(模型)
public class WeatherModel {
    private String weatherData;

    public void setWeatherData(String data) {
        this.weatherData = data;
    }

    public String getWeatherData() {
        return weatherData;
    }
}

// View(视图)
public interface WeatherView {
    void displayWeather(String weatherData);
}

// Presenter(主持人)
public class WeatherPresenter {
    private WeatherModel model;
    private WeatherView view;

    public WeatherPresenter(WeatherModel model, WeatherView view) {
        this.model = model;
        this.view = view;
    }

    public void updateWeather(String data) {
        model.setWeatherData(data);
        view.displayWeather(model.getWeatherData());
    }
}

在MVP中,主持人(Presenter)负责处理用户的输入并更新模型(Model)和视图(View)。与MVC不同的是,主持人(Presenter)通过接口与视图(View)交互,实现了视图(View)和模型(Model)的解耦

  • 我继续追问GPT : 怎么理解 “MVP中主持人通过接口与视图交互,实现了视图和模型的解耦”

在MVP架构中,主持人(Presenter)通过接口与视图(View)进行交互。这意味着视图和主持人之间的通信是通过定义好的接口进行的,而不是直接引用具体的视图实例。这种通过接口进行交互的方式实现了视图和模型(Model)的解耦。
通过使用接口,视图和主持人之间的依赖关系被抽象化,视图只需要知道主持人提供的接口方法,并不需要关心具体的主持人实现。同样地,主持人也只需要关注视图提供的接口方法,而不需要了解具体的视图实现细节。
这种解耦的好处是,当需要更改或替换视图或主持人时,只需实现相同的接口即可,而不会影响其他部分的代码。例如,如果需要更换视图的实现,只需编写一个新的视图类并实现相同的接口,然后将其传递给主持人即可,而不需要修改主持人的代码。
通过接口进行交互还可以提高代码的可测试性,因为可以轻松地使用模拟对象来替代真实的视图或主持人,以进行单元测试。
因此,MVP中主持人通过接口与视图交互,实现了视图和模型的解耦,使得视图和模型可以独立开发、测试和修改,提高了代码的可维护性和可扩展性。

MVVM

// Model(模型)
public class WeatherModel {
    private String weatherData;

    public void setWeatherData(String data) {
        this.weatherData = data;
    }

    public String getWeatherData() {
        return weatherData;
    }
}

// View(视图)
public class WeatherView {
    private WeatherViewModel viewModel;

    public void setViewModel(WeatherViewModel viewModel) {
    // 个人理解 : 通过这里与ViewModel绑定
        this.viewModel = viewModel;
    }

    public void displayWeather(String weatherData) {
        System.out.println("当前天气:" + weatherData);
    }

    public void onCitySelected(String city) {
        viewModel.updateWeather(city);
    }
}

// ViewModel(视图模型)
public class WeatherViewModel {
    private WeatherModel model;
    private WeatherView view;

    public WeatherViewModel(WeatherModel model, WeatherView view) {
        this.model = model;
        this.view = view;
    }

    public void updateWeather(String city) {
        // 模拟获取天气数据的操作
        String weatherData = fetchWeatherData(city);
        model.setWeatherData(weatherData);
        view.displayWeather(model.getWeatherData());
    }

    private String fetchWeatherData(String city) {
        // 模拟获取天气数据的逻辑
        return "天气数据";
    }
}

在MVVM中,视图(View)通过绑定到视图模型(ViewModel)来展示数据,并将用户的输入事件传递给视图模型(ViewModel)进行处理。视图模型(ViewModel)负责从模型(Model)中获取数据,并将处理后的数据提供给视图(View)进行展示。视图(View)和视图模型(ViewModel)之间通过双向绑定进行通信,当视图(View)的状态发生变化时,视图模型(ViewModel)会自动更新数据。
以上示例中,视图(View)通过调用视图模型(ViewModel)的方法来更新天气数据,并通过绑定显示视图模型(ViewModel)提供的数据。视图模型(ViewModel)负责从模型(Model)中获取天气数据,并将其提供给视图(View)进行展示。

根据CodeGPT的回答抽象出模型

以CodeGPT的回答为例,抽象出MVC、MVP与MVVM对应的模型,并以图片的形式直观展示
其中,图中的实线为具体的方法,虚线为数据传输线

MVC

在这里插入图片描述

MVP

在这里插入图片描述

MVVM

在这里插入图片描述

如有错误,欢迎指正~

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVCMVPMVVM 是三种常见的软件架构模式,用于组织和管理应用程序的代码。它们有一些共同的概念,但也有一些区别。 MVC(Model-View-Controller)是最早提出的架构模式之一。在 MVC 中,应用程序被分为三个主要部分: 1. 模型(Model):负责处理数据和业务逻辑。 2. 视图(View):负责显示数据给用户。 3. 控制器(Controller):负责接收用户输入,并根据输入更新模型和视图。 MVP(Model-View-Presenter)是 MVC 模式的变体。MVP 将视图和控制器的职责分离,引入了一个新的组件 Presenter,它作为视图和模型之间的中介。MVP 的关键特点是: 1. 模型(Model):负责处理数据和业务逻辑。 2. 视图(View):负责显示数据给用户。 3. 主持人(Presenter):负责处理用户输入,并更新模型和视图。 MVVM(Model-View-ViewModel)是一种相对较新的架构模式,主要用于现代前端开发。MVVM 借鉴了 MVCMVP 的思想,并引入了数据绑定的概念。MVVM 的关键特点是: 1. 模型(Model):负责处理数据和业务逻辑。 2. 视图(View):负责显示数据给用户。 3. 视图模型(ViewModel):负责将模型数据转换为视图所需的格式,并处理用户输入。同时,它还通过数据绑定机制与视图保持同步。 总的来说,MVCMVPMVVM 都是用于组织应用程序代码的架构模式,它们在组织代码和处理用户交互方面有一些区别。选择哪种架构模式取决于具体的应用场景和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值