软件设计模式与体系结构-软件体系-MVC软件体系结构

五、MVC软件体系结构

代码

MVC(Model-View-Controller)是一种常见的软件体系结构模式,用于组织和设计应用程序的代码结构。它将应用程序划分为三个核心组件:模型(Model)、视图(View)和控制器(Controller),每个组件负责不同的职责。

下面是一个简单的代码示例,说明了MVC模式的基本结构和各个组件的作用。

# 模型(Model)类
class User:
    def __init__(self, username, email):
        self.username = username
        self.email = email

    def get_username(self):
        return self.username

    def get_email(self):
        return self.email

# 视图(View)类
class UserView:
    def display_user_info(self, user):
        print("Username: ", user.get_username())
        print("Email: ", user.get_email())

# 控制器(Controller)类
class UserController:
    def __init__(self, user, view):
        self.user = user
        self.view = view

    def update_user_info(self, username, email):
        self.user.username = username
        self.user.email = email

    def show_user_info(self):
        self.view.display_user_info(self.user)

# 使用示例
# 创建模型对象
user = User("John", "john@example.com")

# 创建视图对象
view = UserView()

# 创建控制器对象,并将模型对象和视图对象传入
controller = UserController(user, view)

# 更新用户信息
controller.update_user_info("John Doe", "johndoe@example.com")

# 显示用户信息
controller.show_user_info()

在上面的示例中,模型(User)表示应用程序中的数据和业务逻辑,视图(UserView)负责展示用户信息,控制器(UserController)充当模型和视图之间的协调者。

通过控制器,我们可以更新模型的数据,并通过视图来显示模型的信息。这种分离的架构使得模型、视图和控制器可以独立地进行开发、测试和维护。例如,在上面的示例中,如果需要改变用户信息的展示方式,只需修改视图部分而不需要修改模型或控制器。

MVC模式的优点包括:

  • 分离关注点:将数据、展示和用户交互分离,使得各个组件可以独立地演化和测试。
  • 提高可维护性:模块化的结构使得修改和扩展变得更加容易。
  • 支持多种界面:通过控制器作为中间层,可以支持多种不同的视图实现。

总之,MVC模式是一种常用的软件体系结构模式,通过将应用程序划分为模型、视图和控制器,实现了关注点的分离和代码的组织。它被广泛应用于各种应用程序开发中,并提供了一种灵活和可扩展的架构方式。

MVC软件体系结构的概念与机制

MVC体系结构将一个互动的应用分为三部分:Model、View、Controller。Model包含核心功能与数据,View为用户显示信息,Controller处理用户输入
根据责任分离与增加可扩展性的原则,Model应该被设计成独立于特定的输入行为和输出表示的程序。

View模块将模型中的数据显示给用户。而因为相同的数据可以有不同形式的显示方法,所以一个Model可以有很多个View

MVC模型各部分功能

模型的责任

  • 从数据库取出数据,并且赋予数据变量
  • 负责业务逻辑实现
  • 负责数据验证,然后将数据存入数据库

视图的责任

  • 获取用户输入
  • 向controller发送处理请求
  • 接收来自Controller的反馈并将model的处理结果显示给用户

控制器的责任

  • 接收来自客户的请求
  • 调用model业务逻辑方法
  • 调用View显示执行结果

MVC的改变–传播机制

在这里插入图片描述

MVC软件体系结构的概念与机制(类图)

在这里插入图片描述

使用观察者模式的MVC体系结构设计类图

在这里插入图片描述

MVC软件体系结构应用实例

在这里插入图片描述
在这里插入图片描述

优缺点

在这里插入图片描述
在这里插入图片描述

三层体系结构与MVC 软件体系结构的比较

在这里插入图片描述
在这里插入图片描述

课程作业

MVC是一种设计模式还是一种软件体系结构?

MVC(Model-View-Controller)既是一种设计模式,又是一种软件体系结构

作为设计模式,MVC旨在解决用户界面和应用程序逻辑之间的分离问题。它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型负责处理应用程序的数据和业务逻辑,视图负责呈现数据给用户,而控制器负责处理用户输入和协调模型与视图之间的交互。

作为软件体系结构,MVC定义了应用程序的整体结构和组织方式。它提供了一种分层的方式来组织和管理应用程序的各个部分。模型、视图和控制器作为独立的组件存在,并通过定义明确的接口和协议进行通信,实现了松耦合和高内聚的设计。

因此,MVC既是一种设计模式,用于解决特定的设计问题,又是一种软件体系结构,用于组织和管理整个应用程序的结构。它在软件开发中被广泛应用,并具有可扩展性和可维护性等优点。

在这里插入图片描述
将观察者类中的更新方法的参数类型设为Observable,可以使观察者能够获取到被观察对象的具体信息和状态,从而能够根据实际情况作出相应的处理。这样做的好处包括:

  1. 获取被观察对象的状态: 通过将参数类型设为Observable,观察者可以获取到被观察对象的状态信息。这使得观察者能够及时获知被观察对象的更新内容,从而根据具体的状态进行相应的处理。

  2. 实现多态性: 通过使用Observable作为参数类型,观察者可以接收任何符合Observable接口的具体实现类的对象。这种多态性的设计使得观察者能够适用于不同类型的被观察对象,而不需要修改观察者类的代码。这增强了代码的灵活性和可扩展性。

  3. 降低耦合度: 通过使用Observable作为参数类型,观察者与被观察对象之间的耦合度降低。观察者不需要依赖具体的被观察对象类,只需要依赖于通用的Observable接口。这种松耦合的设计使得观察者能够更加独立、可复用和可测试。

总而言之,将观察者类中的更新方法的参数类型设为Observable使得观察者能够获取被观察对象的具体信息和状态,实现多态性,降低耦合度,从而提高了系统的灵活性、可扩展性和可维护性。

画图

在这里插入图片描述
在这里插入图片描述

课程作业

在这里插入图片描述
两层客户端-服务器体系结构是一种常见的软件架构模式,它由两个主要组成部分组成:客户端和服务器。每个组件都有特定的功能和职责。

  1. 客户端层:

    • 胖客户端(Fat Client):在胖客户端架构中,客户端负责处理大部分的应用逻辑和数据处理。它具有丰富的用户界面和功能,能够在本地执行复杂的计算任务和数据处理。胖客户端通常需要在本地安装和运行较大的软件包
    • 瘦客户端(Thin Client):在瘦客户端架构中,客户端主要负责用户界面的显示和用户输入的收集,而应用逻辑和数据处理主要由服务器端完成。瘦客户端相对较轻量,它依赖于服务器提供的应用程序和数据,并通过网络与服务器进行通信和交互。
  2. 服务器层:

    • 服务器:服务器是中央处理单元,负责接收来自客户端的请求并提供所需的服务和数据。服务器层包括应用程序和数据的存储、处理和管理。它负责执行复杂的计算任务和数据操作,并将结果返回给客户端。

在这种体系结构下,程序的工作原理如下:

  1. 客户端向服务器发送请求,请求可能包括用户输入、数据查询等。
  2. 服务器接收到请求后,根据请求的类型和内容,进行相应的数据处理和计算,并生成响应结果。
  3. 服务器将响应结果发送回客户端。
  4. 客户端接收到服务器的响应结果后,根据需要进行界面的更新和显示,同时可能会涉及进一步的用户操作。
  5. 这个过程可能会在客户端和服务器之间进行多次交互,直到完成所需的任务。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
上篇:软件设计模式例子代码  【例2.2】简单工厂方法模式-汽车保险  【例2.3】工厂方法模式-汽车保险  【例2.4】抽象工厂模式-房屋信息  【例2.5】生成器模式-房屋信息  【例2.6】单例模式-互联网连接  【例3.2】组合模式-五子棋代码  【例3.3】组合模式-空军指挥系统  【例3.4】组合模式-世界问候语  【例3.7】类适配器模式-客户信息验证  【例3.8】对象适配器模式-字符串排序  【例3.10】外观模式-安全系统  【例3.11】外观模式-椭圆功能  【例3.13】桥接模式-茶水机系统  【例3.14】桥接模式-几何立体体积  【例4.1】迭代器模式-矩阵搜索  【例4.2】迭代器模式-产品搜索  【例4.4】访问者模式-名牌鞋销售软件  【例4.5】访问者模式-计算机部件销售软件  【例4.6】命令模式-室内温度控制  【例4.7】命令模式-室内温度控制-2个GUI  【例4.8】命令模式-室内温度控制-3个GUI  【例4.10】中介者模式-旅游信息共享  【例4.11】中介者模式-海岛机场  【例4.13】策略模式-整数排序  【例4.14】策略模式-中国属相  【例4.16】状态模式-交通信号灯-设计1  【例4.16】状态模式-交通灯信号灯-设计2  【例4.16】状态模式-交通灯信号灯-设计3 下篇:软件体系结构例子代码  【例6.4】结构化设计-文件更新-C源代码  【例6.5】面向对象设计架构-文件更新  【例6.7】顺序批处理架构-文件更新  【例6.8】顺序批处理架构-图像处理  【例6.9】管道过滤器架构-主动过滤器  【例6.10】管道过滤器架构-被动过滤器  【例6.11】管道-过滤器架构-文件更新  【例6.12】管道-过滤器架构-图像处理程  【例6.14】事件体系结构-鼠标响应  【例6.17】事件体系结构-观察者模式-大草原1  【例6.18】事件体系结构-观察者模式-大草原2  【例6.19】事件体系结构-观察者模式-温度显示  【例6.21】层次架构-软件测试  【例6.22】层次架构-银行- Access数据库  【例6.23】MVC架构-二手车拍卖-无观察者  【例6.24】MVC架构-二手车拍卖-观察者-3个图形界面  【例6.25】MVC架构-二手车拍卖-观察者-1个图形界面

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VengaZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值