MVC和多层架构如何理解?

2021-03-24 14:57发布

22条回答
无需指教
2楼 · 2021-03-25 08:52

1.View——表示层

1.1准备数据

实现方式:struts,servlet等

1.2显示数据

实现方式:extjs,jsp,jquery,html等

2.Service——业务层

实现方式:drools等

3.Dao——数据访问层

实现方式:hibernate、mybatis等


小竹子
3楼 · 2021-03-25 10:07

做企业应用开发时,经常采用三层架构分层:表示层、业务层、持久层。表示层负责接收用户请求、转发请求、显示数据等;业务层负责组织业务逻辑;持久层负责持久化业务对象。

这三个分层,每一层都有不同的模式,就是架构模式。表示层最常用的架构模式就是MVC。

因此,MVC是三层架构中表示层最常用的架构模式。



谭剑
4楼 · 2021-03-25 10:58

MVC 模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。

  • View(视图) - 视图代表模型包含的数据的可视化。

  • Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。



Vita
5楼 · 2021-03-25 11:32

1. 三层架构

目前项目中可能会存在的问题:分工合作不明确,后期代码维护不方便。解决这些问题我们可以使用分层架构来实现。分层架构目前有两种:三层架构和MVC架构。

三层架构:

javaWEB阶段提出的一种软件设计架构模式,主要将系统划分为三部分:

1)表现层:包含servlet  jsp技术,核心内容是服务器数据的展示功能。

2)业务逻辑层:包含业务逻辑的处理。通常我们也叫service层。

3)数据访问层:包含对数据库的持久化操作,通常指JDBC技术。

 

2. MVC架构

MVCmodel view control)模型视图控制器。是目前主流的架构设计模式。可以适用于多种开发语言环境中:c  java  python 。。。。

1)view视图层:负责项目的数据的页面渲染(页面展示)。涉及的技术(html  css  jsp  js jq ajax

2)control控制层:负责请求和响应的处理。涉及的技术(servlet sprinngMVC strut2 springboot

3)model模型层:javaBean对象。(java实体类pojo  持久化对象dao  业务逻辑对象service


竹朿
6楼 · 2021-03-25 16:07

MVC和多层架构从目的上说是一直的,都是为了解耦。但实际上概念被提出本身,又是毫无关系的。

MVC是模型层(M)界面层(View)和控制层(Controller)构成的

而多层是解决整个应用程序中各个业务操作过程中不同阶段的代码封装问题

一朵大红花
7楼 · 2021-03-25 16:52

1、v---view---视图

2、m---model---模型

3、c---controller---控制

三层架构

表示层

业务逻辑层service

数据访问层dao 比如mybatis

孔夫子2021
8楼 · 2021-03-25 17:22

相信将三层架构和MVC混为一谈的人大有人在。在此,我想说说我对三层(多层)架构和MVC的一些浅见。要想深入解一门技术,首先知道为何会出现这门技术?它是为了解什么问题而出来的?清楚了这些问题,在随后的学习中自然就会顺风顺水,而不是一头雾水。

  三层(多层)架构

  就拿B/S开发说起。最初的ASP直接把数据库访问代码写在页面上。整个网站就是几个页面。数据访问、业务控制、界面显示全都在一个文件里。这种设计可以理解为一层架构。因为它没有分层的概念。在这样的开发模式下,同样的逻辑代码经常出现在多个地方。当有相似的功能需要实现时,直接拷贝代码到另一个地方,然后修改。如果遇到系统升级或业务规则发生变化,必须找遍整个系统并作调整。这样的设计不仅工作量大,而且不利于维护。往往一个程序员必须熟悉数据访问和业务规则,同时还得精通页面的编写,因为要写完一个功能就必须把这些内容全部写在页面上。JSP程序员在开发一个功能时会写两样东西jsp和JavaBean。JaveBean封装了数据访问和业务逻辑,jsp页面调然JavaBean的接口,然后将数据显示在页面上。这样如果有多个页面需要用到相同的业务规则只需调用同一个JavaBean封装好的接口即可。如果修改了业务规则直接修改JavaBean而不用到每个页面上去寻找相同的代码。同时也使得业务逻辑实现人员可以和界面开发人员分工合作。这种设计可以理解为两层架构(表现层、数据访问+业务逻辑)。随着编程技术的发展,人们发现不同的业务规则里可能会用到相同的数据。如果按照原来的设计方式同样存在许多重复的代码在JavaBean里。所以后来就将数据访问和业务逻辑再次细分。形成了表现层+业务逻辑层+数据访问层这种架构。当然,随着技术的发展和系统复杂程序的增加,一个系统还可能存在其它的“层”,如:权限验证层、对象缓存层等。

  三层(多层)架构的出现,使得程序编写的代码得以重用,程序员之间可以更好地分工合作,程序架构更加清晰并易于维护。但三层(多层)架构并非适合于所有的项目开发。原先获取一个数据只需直接从数据库查询出来即可。用到了三层(多层)架构后还得先通过业务逻辑层,然后数据访问层才可以得到。原来一个类或一段代码就可以完成的操作变成了好几个类协作才能完成。如果项目规模并不大,采用这样的多层架构就像杀鸡用牛刀一样反而不顺手了。所以,多层架构适用于需要协同开发且具有一定规模或业务较复杂的系统。同时由于分了多层,一个接口的变化可能会引起多层接口的修改。

  MVC(Model-View-Controller)设计模式

  MVC是一种非常经典的设计模式。它广泛应用于各种语言和各种类型的应用中。MVC的思想是将“显示”(View)、“数据”(Model)和“控制”(Control)分开。View部分负责向用户展示数据和接收用户输入Control负责接收View传来的输入并执行相应的业务逻辑获得执行结果,然后再调用View将结果向用户呈现。Model是输入和输出的数据载体。MVC将显示和控制分开,使得View的变化不会影响到Control的修改,同时同样的数据可能会提交到不同的View进行显示。MVC和多层架构一样,提高了系统的可维护性、可扩展性和可移植性。

  现在各种开发语言都有很多框架和技术支持MVC这种设计模式。在JAVA里有开源框架Struts、Spring MVC、JSF等。它们通常都是利用Servlet作Control,利用模板语言作为View。而.net也推出了自己的MVC框架,最近推出了MVC2.0(在vs2008下支持)。这一切都显示了MVC设计模式的强大生命力。要想学习MVC设计模式必须深入理解三个部分的作用并从根本上改变以前开发当中的设计思路,不然用到MVC设计模式会觉得处处受牵制。

  对于大多数朋友会认为三层架构就是MVC的原因,我想可能是因为MVC和三层架构都是分三个部分吧。多层架构的思想是低层为上层服务,上层调用低层时根本不用关心具体实现(所以在多层架构中通常是通过接口进行调用,而非具体的实现对象)。MVC则是分工合作,相互协调。另外还有两点需要说明一下。

  一,MVC中的Model和三层架构中用到的Model在概念上并非同一对象(虽然在大多数情况下是同样的类在担当这个职责)。MVC中的Model是值对象(Value Object 简称VO),其职责是封装需要传递到View进行显示的数据。三层架构中的Model是业务对象(Business Object简称BO),其职责是在处理业务逻辑时进行数据传递。在有些复杂的系统中还有持久对象(Persistant Object简称PO)。

  二,webform不是MVC。在webform中代码文件(通常是“页面名称.aspx.cs”)是继承于System.Web.UI.Page,而页面又继承于代码文件中的类。它并不存在View和Control。

 

  后话:多层架构和MVC都是前人的经验总结。好好利用多层架构和MVC可以开发出健壮、易于扩展的系统。而软件开发人员必须深入理解这些设计模式的精髓方能灵活应用,否则将会深受其害,在开发中处处受制。


Dong
9楼 · 2021-03-25 18:31

三层架构中的View层是跟用户发生直接关系的层。

MVC中的V和C就是这样的存在,所以MVC中的V和C均属于三层架构的View层。


同时,MVC中的M(Model)包括了数据承载Bean和业务处理Bean,其中业务处理Bean分为Service或Dao对象,分别对应业务逻辑处理和数据库操作,相应的,它们对应的是三层架构中的Service层和Dao层;

相关问题推荐

  • 回答 36

    看军事新闻的同学应该都知道,一艘航空母舰作战能力虽然很强,但是弱点太明显,就是防御能力太差,单艘的航空母舰很少单独行动,通常航空母舰战斗群才是主要军事力量,你可以把单艘航母理解为的单体应用(防御差,机动性不好),把航母战斗群(调度复杂,维护...

  • 回答 31

    初始化过程细节:首先进行的就是将服务装载到容器中,然后准备注册服务。和Spring中启动过程类似,Spring启动时,将bean装载进容器中的时候,首先要解析bean。所以dubbo也是先读配置文件解析服务。解析服务:基于dubbo.jar内的META-INF/spring.handlers配置,...

  • 回答 27

    分布式事务 指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上 。换成比较容易理解的话,就是多个事务之间再保持事务的特性,也就是多个事务之间保证结果的一致性。分布式事务解决方案1、基于XA协议的两阶...

  • 什么是接口幂等性?2021-02-24 18:21
    回答 25

    1. 接口调用存在的问题        现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个服务,而服务调用服务无非就是使用RPC通信或者restful,既然是通信,那么就有可能在服务器处理...

  • 回答 21

    前提是另外一个bean在bean容器中能找到

  • SpringCloud Netflix和Sprin2020-11-12 09:41
    回答 8
    已采纳

    SpringCloud Netflix和SpringCloud Alibaba的区别如下图:

  • 回答 16

    哨兵(Sentinel)是 redis 的高可用性解决方案,前面我们讲的主从复制它是高可用的基础,需要人工介入才能完成故障转移,哨兵可以解决这个问题,在主从复制情况下,当主节点发生故障时,哨兵可以自动的发现故障并且完成故障转移,实现真正的 redis 高可用。在...

  • 回答 8

    redis为什么会有高并发问题redis的出身决定Redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘。由于单线程所以redis本身并没有锁的概念,多个客户端连接并不存在竞争关系,但是利用jedis等客户端对redis进行并发访问时会出现问题。发生连...

  • 回答 8

    用dubbo是想利用分布式集群的形式来提高服务的并发量,适用与大型项目.如果不用它还想提高并发另一个解决方案是springCloud+微服务.适合大中小型项目.当前对并发要求的项目还是很多的,所以dubbo用的也相对较多.建议如果是初学者可以跳过dubbo直接学习第二个方...

  • 回答 4

    不需要。一般是service分出去。然后其它放在web层即一个jar为service业务处理,一个为web层war包

  • 回答 7

    在回答这个问题之前,我们先回答一下什么是锁。普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个的顺序执行,否则会出现并发问题。如何控制呢?就是设置一个各个线...

  • 回答 6

     springmvc位于表现层,主要与浏览器进行交互(接收和响应浏览器请求)。springmvc采用MVC设计模型,模型由model、view和controller组成。         model(模型):对应JavaBean         view(视图):对应JSP         controller(控制器)...

没有解决我的问题,去提问