架构学习之MVC

java学习总结:MVC模式、三层架构、分页 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。最简单的、最经典就是JSP(view) +Servlet(controller) + JavaBean(model)每页有5条,取出第1页数据 limit 0,5。每页有5条,取出第2页数据 limit 5,5。 阅读详情

1.MVC架构

Model-View-Controller (MVC) 架构模式,可以分解为以下三个部件:

模型:封装业务逻辑;

视图:即界面(这里不啃概念);

控制器:在视图与控制器间传递消息,使模型和视图协调工作。

 

在理想状况下,这种架构模式带来的好处是令人心动的。由于界面与业务逻辑的分离,降低了依赖性,使得逻辑代码可以完整地、轻松地被摘下来,用于别处。同时,控制器使用消息分发,可以轻易实现同时对多个界面产生影响。当然,这是理想状况。

 

2.一个MVC示例
MVC模块的简要类图:


 


 


 


 


(1)ModelElemen类实现ISender、IReceiver接口,可发送及接收消息,作为Model类的基类;
(2)ViewElement类继承自Form类,并实现ISender、IReceiver接口,可发送及接收消息,作为View类的基类;
(3)ControllerElement类实现ISender、IReceiver、IController接口,可发送、接收及分发消息,作为Controller类的基类。

配置文件:

为了控制器最终能正确有效地向特定的一个或若干个View或Model分发消息,系统用一个XML文件用于保存Model、View、Controller三者的关系,即完成所谓“注册”的功能,该XML文件结构类似如下:

  <ElementDefinetion>

<FullName>xxProj.MainForm</FullName>

<ShortName>MainForm</ShortName>

<AssemblyName> xxProj </AssemblyName>

<BelongedController>IndiController</BelongedController>

<Type>View</Type>

  </ElementDefinetion>

  <ElementDefinetion>

    <FullName> xxProj.ActiveGrpCallList</FullName>

    <ShortName>ActiveGrpCallList</ShortName>

    <AssemblyName> xxProj </AssemblyName>

    <BelongedController>GrpCallController</BelongedController>

    <Type>View</Type>

  </ElementDefinetion>

  <ElementDefinetion>

    <FullName> xxProj.IndiCallModel</FullName>

    <ShortName>IndiCallModel</ShortName>

    <AssemblyName> xxProj </AssemblyName>

    <BelongedController>IndiController</BelongedController>

    <Type>Model</Type>

  </ElementDefinetion>

  <ElementDefinetion>

    <FullName> xxProj.GrpCallModel</FullName>

    <ShortName>GrpCallModel</ShortName>

    <AssemblyName> xxProj </AssemblyName>

    <BelongedController>GrpCallController</BelongedController>

    <Type>Model</Type>

  </ElementDefinetion>

…… ……

 

MVC模式下消息传递流程:
下面是一个操作的消息传递(调用)流程:


 


 


 


 


 

该操作的实际代码类似如下:

主界面(View)MainForm中:

private void StartSchemaToolStripMenuItem_Click(object sender, EventArgs e)

{

this.SendMsg("MainForm.StartSchema", null);

}

 

在MainForm的父类ViewElement中,SendMsg()方法实际上是通过一个被称为“发送代理”SendProxy来发出消息:

public ObjectDictionary SendMsg(string strMsgHeader, ObjectDictionary dicMsgContent)

{

       return this.SendProxy.SendMsg(strMsgHeader,dicMsgContent);

}

 

在发送代理SendProxy中,调用MainForm所属的控制器的DistributeMsg()方法:

public ObjectDictionary SendMsg(string strMsgHeader, ObjectDictionary dicMsgContent)

{

return this.Controller.DistributeMsg(strMsgHeader,dicMsgContent);

}

 

在MainForm所属的控制器IndiController中,方法DistributeMsg()具有如下代码

public override ObjectDictionary DistributeMsg(string strMsgHeader, ObjectDictionary dicMsgContent)

{

try

{

switch (strMsgHeader)

{

case "MainForm.StartSchema":

this.ElementFactory.GetView("StartSchemaWizard1Form").ReceiveMsg("StartSchemaWizard1Form.StartSchem", dicMsgContent);

return null;

……

}

}

}

 

其中ElementFactory.GetView("StartSchemaWizard1Form")利用C#中的反射机制返回类

StartSchemaWizard1Form的一个对象(此时须用到上述的XML配置文件,以便在构造对象时传入其所属的控制器)。最终实现界面变化的代码则位于目标View(即StartSchemaWizard1Form)的ReceiveMsg()方法中,这样,一个操作最终完成。

 

public override ObjectDictionary ReceiveMsg(string strMsgHeader, ObjectDictionary

dicMsgContent)

{

switch (strMsgHeader)

{

case "StartSchemaWizard1Form.StartSchem":

//界面变化

……

break;

……

}

return null;

}

 

 

3.最后

以上示例是曾经被实际应用过的MVC,写作的人恐怕也是参考了网上的例子,所以可能难免有些似曾相识。

 

关于它的消息流程,你也可以很直白地将它理解为:将一个直接的函数调用拆分为两步,先调用控制器的相应方法,再经由控制器调用位于视图中的方法。(或者从视图到控制器到模型)

 

所谓的消息,不过是些字符串,通过这些字符串来标识所要调用的目标。

 

FAGLB03余额显示异常排查与修复指南 本文针对SAP新总账中FAGLB03报表余额显示异常问题,提供了专业的排查与修复指南。文章深入剖析了数据不一致的核心原因,如FAGLFLEXT汇总表与凭证明细不同步、年度余额结转(FAGLGVTR)失败等,并详细介绍了使用FAGLF03进行精准诊断、通过SE38执行标准调整程序TFC_ADJUST_VZ进行修复的标准操作流程,帮助用户快速恢复数据一致性,确保财务报表的准确性。 阅读详情

相关推荐

虚拟零售智能客服架构设计:如何用大模型实现多轮对话与精准推荐?

想象一下,当你在一个电商平台购物时,遇到了一个能像你的专属导购一样,不仅能听懂你模糊的需求(“我想买一件适合夏天去海边玩,又能兼顾日常通勤的裙子”),还能记得你之前提到的尺码偏好和预算,甚至在你犹豫时,主动推荐几款符合你风格且正好有促销活动的商品——这不再是科幻电影中的场景,而是基于大语言模型(LLM)技术的新一代虚拟零售智能客服能够提供的体验。这一层是我们架构设计的重点,会在后续章节详细展开。如基于CRF、RNN的模型,或基于规则的状态更新,通常需要大量标注的对话状态数据,且对新领域、新槽位的适应性差。

Java大师兄的博客 1589

项目架构MVC,IoC,DI【学习笔记】

本文手动实现一个类似 next.js 的 MVC 架构,实现 IoC控制反转和 DI依赖注入。

我的小鱼干呢! 1135

CubeMX配置ADC+DMA避坑实战:如何避免采样过快导致的系统崩溃

本文针对STM32开发中常见的ADC采样过快导致程序卡死问题,提供了基于CubeMX的实战避坑指南。通过分析ADC与DMA协作机制,详解时钟配置、采样时间、DMA缓冲区长度及中断设置等关键步骤,帮助开发者从源头规避系统崩溃风险,实现稳定可靠的数据采集。

weixin_28273593的博客 324

【java学习】MVC和三层架构

zerlina98的博客 341

【origin】负载牵引的Smith圆图

export导出为txt,得到的是幅相值,复制到excel如下图,有多根类似格式的线,只需要复制DE列到origin中。回到sheet,发现新增了选中的一组值,就是解释过后的值。笔者没找到把所有线一起画出的方法,只能蠢一点,一组一组画。而且,箭头所指的位置都变成了Y轴(应该要为X轴)以此类推,把之后的曲线都画完,可以汇总到一个图中。显示以下界面,点击右上圆图,选择解释。会生成新的graph,再重新解释一次。选择第二组线,同样画smith圆图。选中第一组线,选smith圆图。复制到origin,如下图。

乾巽的博客 2920

C++中const和指针*的组合问题

今天在复习> 章节7.3的时候想到以前做的一个题,const和指针运算符*的若干种组合的合法性和意义问题,有点混淆,所以写了一个测试代码来验证一下,简单明了,一目了然。如果有什么遗漏的话欢迎指出。 首先是在Ubuntu14.04.1下用gcc 4.8.4编译运行的结果,编译器报错信息都附加在对应语句后面的注释里 /* * Note : Test for the combinations of

theColdOne的专栏 1081

SpringMVC基础学习之简单回顾MVC架构和Servlet的使用

前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师。 这个SpringMVC基础学习系列是用来记录我学习SpringMVC框架基础知识的全过程 (这个系列是参照B站狂神的SpringMVC最新教程来写的,由于是之前整理的,但当时没有发布出来,所以有些地方可能有错误,希望大家能够及时指正!) 之后我将尽量以两天一更的速度更新这个系列,还没有学习SpringMVC框架的小伙

weixin_45301250的博客 1230

华为OD机考 新系统真题 【区分奇偶的数组排序】

华为OD机试 新系统真题【区分奇偶的数组排序】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【区分奇偶的数组排序】多语言题解。

qq_45776114的博客 513

JavaWeb第五周学习:从组件原理到MVC架构的深度探索

日期 | 学习模块 | 实践内容 || 周一 | 知识体系梳理 | 绘制Servlet/JSP运行流程图 || 周二 | Servlet高级特性 | 编写线程安全的Servlet控制器 || 周三 | JSP2.3规范实践 | 构建EL函数库与自定义标签 |

YZH666A的博客 985

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之Port模块配置详解(MCAL配置)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之Port模块配置详解(MCAL配置)

weixin_42412049的博客 2278

高通Camx功能feature分析之二:remosaic流程

本文介绍了Remosaic技术及其在图像处理中的应用。Remosaic是将4cell1像素排布还原为普通Bayer结构的过程,分为硬件和软件两种实现方式。文章详细解析了Remosaic流程,包括配流情况、Feature选择、初始化过程,以及触发拍照的完整流程。重点分析了从普通预览切换到全尺寸拍照的关键步骤:激活全尺寸RDI会话、生成请求、等待就绪、唤醒离线线程和重启预览。通过代码层面的分析,揭示了Remosaic技术如何实现高分辨率图像还原,同时说明了该过程中可能出现的预览定屏现象及其原因。

1880

学习JAVA中的Spring MVC常用注解及三层架构,这一篇就够了

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为SpringMVC.(Servlet 是⼀种实现动态⻚⾯的技术. 准确来讲Servlet是⼀套 Java Web 开发的规范,或者说是⼀套Java Web 开发的技术标准. 只有规范并不能做任何事情,必须要有⼈去实现它. 所谓实现 Servlet 规。

weixin_74149684的博客 1507

2021-10-29【微生物】丨基于qiime2工具16S/ITS分析全套流程(上)

目录摘要工具与方法使用命令结果展示总结二级目录三级目录 摘要 前两个月项目特别多,最近终于有机会闲下来写点文章,把之前搭建的流程梳理一遍。前同事分析16S/ITS使用的qiime1,我接手后感觉不太适应,希望能够使用新版本来搭建,于是花了几天时间重新搭了这个流程, 工具与方法 使用工具:qiime2 使用版本:qiime2-2021.4 参考文档:https://docs.qiime2.org/2021.4/(最新版本2021.8) 使用命令 在这里插入代码片 结果展示 总结 二级目录 三级目录 ...

1万+

MVC架构学习

MVC简介MVC架构简介浅谈MVC架构—你到底有什么本事MVC知识点总结MVC简介MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达...

my_learning_road的博客 491

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mvc与三层架构再学习

三层架构 表现层(UI):展现给用户的界面,即用户在使用一个系统的时候的所见所得。 业务逻辑层(BLL):对数据层的操作,对数据业务逻辑处理。 数据访问层(DAL):直接操作数据库,针对数据的增添、删除、修改、更新、查找等。 MVC MVC是 Model-View-Controller,严格说这三个加起来才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了...

qq_39540680的博客 375

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Spring MVC】快速学习使用Spring MVC的注解及三层架构

Java Spring MVC 是 Spring Framework 中的一个模块,用于开发基于 Java 的 Web 应用程序,是一个功能强大、灵活且易于扩展的 Web 开发框架,为开发人员提供了一种优雅的方式来构建基于 Java 的 Web 应用程序

smile_sundays的博客 5511

Java初试MVC及三层架构学习笔记

最近又捡起了对Java的学习,通过对一个实例的介绍,总结下此次对Web开发中MVC三层架构的学习,以便用于日后的复习。 一、 MVC 简单的先介绍下MVC模式: M(Model):JavaBean。用于完成具体的业务操作。 JavaBean:Java中特殊的类. JavaBean满足条件: public修饰的类,并提供public无参构造方法 所有的属性都是private修饰 提供getter和setter方法 使用层面: 封装业务逻辑:dao层封装对数据库的底层操作 封装数据:domain层。对

Chemlez'blog 1018

iOS——MVC架构学习

让每部分只做自己该做的事。层职责不该做的事Model存数据、整理数据操作 UI、直接更新视图View显示数据、传递用户操作处理交互逻辑、直接改数据ller`:负责把数据填进 Cell,管理整个列表的逻辑让每部分只做自己该做的事。层职责不该做的事Model存数据、整理数据操作 UI、直接更新视图View显示数据、传递用户操作处理交互逻辑、直接改数据Controller协调 Model 和 View把太多业务逻辑堆在这里。

2505_93363502的博客 491

项目架构MVC,DDD学习

本文一起看下系统架构DDD,MVC相关的内容。

wang0907的博客 1401

学习javaEE下的MVC架构

MVC的定义: M:Model 与数据有关的一层,在项目中一般指DAO()与DTO这样一层 V: View 与显示数据相关的一层,在项目中一般指jsp C: Control 连接View与Model,在项目中一般指servlet与service View层负责前端的人机交互,页面需要显示的数据,与页面产生需要保存的数据都由Control层来与Model层沟通。 Control层同时还负责接收HTT...

c22cxz的博客 463

【Java架构学习】MVC和三层架构的区别

其实这篇博客的重点不是介绍三层架构,是重点介绍MVC并帮助理解MVC。学了这么久MVC发现对它的理解还存在很多误区,今天就来好好整理一下MVC。     MVC即Model-View-Controller,其中M-V-C各代表什么,我想即使我不一一列举大家也都了然于胸了。因为太熟悉了,就像我们当初学习三层架构一样,时间长了U-B-D各代表什么含义信手拈来。但是我想说的是,我们是否对MVC的认识也

不忘初心 3905

MVC架构学习理解

mvc架构初学完整代码

weixin_44133816的博客 533

关于MVC架构的学习与思考

MVC架构是互联网开发中前端常用的架构思想目的:通过将视图(View)、数据(Model)和控制器(Controller)分离来实现解耦,从而达到模块化、易于维护和扩展的目的。

OnlyWriteBUG的博客 522

mvc三层架构_MVC学习1

MVC三层架构什么是MVC: Model, View 以及 Controller早期架构:用户直接访问控制层, 控制层可以直接操作数据库;servlet MVC三层架构Model:业务处理: 业务逻辑(Service)数据持久层: CRUD (Dao)View:展示数据提供链接发起Servlet请求 (a, form, img ...)Controller (Servlet):接受用户请求: (r...

weixin_39808877的博客 121

ASP.NET MVC 三层架构知识的学习总结

自从使用过一次MVC进行团队开发后,体会到了面向对象开发软件的便利。使用MVC的时候,各个层之间的低耦合使得他们之间的联系非常的第,也就降低了模块之间的依赖程度。 首先介绍一下MVC的意义,和各个层面之间的用途和功能。 1)实体层。主要用来声明在视图层和业务逻辑层之间传递数据的载体。通常代表来源与项目数据库中一个或者多个表组成的一条有意义的记录。 2)业务逻辑层。根据业务逻辑向视

无名指的约定 4227

基于MVC架构的学习平台的开发

平台采用MVC架构,数据库为MYSQL,前端为JSP、HTML,后端主要为JAVA 登陆模块: 博客编辑模块: 搜索模块: 新闻模块:   在线编程: 在线课堂: ...

qq_34418987的博客 294

Sprig MVC 学习笔记 (1)—— 网站的架构

Sprig MVC 学习笔记(1) —— 网站的架构 1.1 软件三大类型 单机类型:即不需要联网的单机软件。 CS类型:客户端(Client)与服务端(Server)通过互联网进行通信。 BS类型:使用浏览器(Browser)来访问不同类型网站,具体业务在不同的服务端(Server)进行。解决了CS结构中每个软件都要客户端和服务端的问题。 【比较】在这三种软件结构中,BS开发简单、功...

菜鸟的后花园 241
上一篇: MVC模式的UML类图
下一篇: JDOM入门:使用JDOM解析XML
kevin_long
博客等级 码龄20年 30粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值