三层架构与MVC谜团之答案揭晓

2023-11-01

    我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念。下面我来为大家揭晓我所知道的一些真相。
 

首先,它俩根本不是一个概念。

    
    三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目。
    MVC是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目。
 
    那么架构跟设计模式有什么区别呢?
    我们从接手一个项目开始,首先,我们需要进行架构设计,一般我们采用的就是分层式的架构设计,即我们的三层架构。
 
    然后,在确定了架构以后,我们再根据项目的具体需求去考虑是否需要应用一些设计模式,比如是否应用我们的MVC模式,抽象工厂模式等等。(在这里我们看出,MVC与三层架构不是一个等级的,而与抽象工厂等设计模式才是一路的)
    最后,确定了模式以后,就是我们的一些具体的实现了。(当然一个项目不仅仅考虑这些问题,我只是为了说明两者的区别,将其他问题已省略)
 
其次,它俩划分的层次不同。
    三层架构将整个项目划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
    MVC即Model(模型),View(视图),Controller(控制)。
    下面看一下他俩的区别与联系:
 
    通过这个图我们可以知道,我们平常所说的V是UI,C是BLL,M是DAL的观点是错误的。
而我们通常所见到的MVC一般也都是在应用三层架构的基础上,即将Model层再进行分层。而如果Model不再进行划分的话,那么使用MVC的意义也就不大了。
 
然后,它俩的目的着重点不同。
    三层架构的目的着重点是“高内聚,低耦合”,即解耦。
    MVC的目的则是实现Web系统的职能分工,即职责划分。
    其实职责划分也是解耦,但是三层侧重的是整体的一个解耦,而MVC侧重的是web系统的解耦,即侧重jsp和Servlet的一个解耦。
 
最后,为何我们会将其混为一谈?
    既然两者有这么多的不同,我们为什么还总是将其混淆呢,下面我列举了几个我们常常将其混为一谈的几个原因:
    1.二者都是“三层”。
    这个原因是最容易迷惑我们初学者的,一个是UI,BLL,DAL,一个是View,Controller,Model,不都是三层吗?
    虽然都是“三层”(不一定是真的三层,还可以是多层),但是它们的划分的不一样。大家可从上面的图中看出不同。
    2.MVC总是伴随着三层架构
    这个就是我在前面一再强调的,我们一般是在考虑使用(也可以不使用)了三层架构的基础上再根据具体需求决定是否需要使用MVC,于是我们常说的MVC中总是伴随着三层架构,所以大家总是会认为MVC就是三层架构,三层架构就是MVC,殊不知,它们二者是一起出现的。
    3.都是在分层,即都是在解耦。
前面说它们目的的时候也说了,虽然它们的侧重点不同,但是它们的总体目的是一样的,都是为了解耦,对于初学者而言,是不知道这两个侧重点有何不同的。
 
    大家往往对它们的联系知道很多,不然也不会混为一谈,但是对它们的区别却知道较少,希望我上面讲解的它们两者之间的区别可以让大家对它们有些了解,如有写的不妥的地方,请指教。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三层架构与MVC谜团之答案揭晓 的相关文章

  • 程序员必知的23种设计模式之组合模式

    文章目录 1 模式引出 学校院系展示需求 1 1 传统方案 1 2 传统方案问题分析 2 组合模式基本介绍 2 1 方案修改 3 组合模式解决的问题 4 组合模式的注意事项和细节 1 模式引出 学校院系展示需求 编写程序展示一个学校院系结构
  • 设计模式——State(状态)模式

    目录 前言 1 定义 2 适用性 3 结构 3 1 结构图 3 2 参与者 4 应用举例 4 1 State TcpState 4 2 Context TcpConnection 4 3 ConcreteState ListeningTcp
  • DDD专家张逸:构建领域驱动设计知识体系

    张逸 读完需要 5分钟 速读仅需 2 分钟 领域驱动设计专家 曾就职于 ThoughtWorks 作为 Lead Consultant 为客户提供架构设计 大数据分析 持续交付 代码质量 敏捷管理等咨询服务 著译作包括 软件设计精要与模式
  • 如何做自动化测试

    这个话题比较大 相信大家也都有自己的想法 我在这里写一些我自己的看法 请大家指教 什么叫做自动化测试工程师 首先 会使用自动化测试工具的测试人员不能够称之为完全的自动化测试人员 这类测试人员被称为 工具小子 Script Kid 这个阶段还
  • 使用SpringSecurity

    前几天写了一个SpringBoot对拦截器的使用 在实际项目中 对一些情况需要做一些安全验证 比如在没有登录的情况下访问特定的页面应该解释的拦截处理 这一篇介绍使用SpringSecurity来做简单的安全控制 由于SpringSecuri
  • 008-黑盒测试和白盒测试的优缺点

    黑盒测试和白盒测试的优缺点 黑盒测试的优点有 比较简单 不需要了解程序内部的代码及实现 与软件的内部实现无关 从用户角度出发 能很容易的知道用户会用到哪些功能 会遇到哪些问题 基于软件开发文档 所以也能知道软件实现了文档中的哪些功能 在做软
  • 【UI自动化测试】Jenkins配置

    前一段时间帮助团队搭建了UI自动化环境 这里将Jenkins环境的一些配置分享给大家 背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测
  • 【QView】基于QML的UI组件框架 之 AImage (图片)

    先上结果演示 环境 不说版本就是耍流氓 硬件 通用PC 手机 Jetson Xavier NX 套件 均测试有效 系统 Ubuntu 20 04 Android Windows 均测试有效 软件 基于QT6 2 4 Qml 功能描述 AIm
  • UI自动化测试方案

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 3k次 点赞60次 收藏8次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自动
  • 设计模式详解---策略模式

    1 策略模式简介 策略模式 Strategy Pattern 是一种行为型设计模式 用于在运行时根据不同的情境选择不同的算法或策略 该模式将算法封装成独立的类 使得它们可以相互替换 而且可以独立于客户端使用它们的方式 1 1 主要角色 上下
  • UI 易用性测试 以及自动化实现!

    GUI 是指图形用户界面 UI 是指用户界面 对于纯软件系统 这两者没有本质的区别 GUI易用性测试与 UI 易用性测试内容一致 但是如果测试的对象是一个产品 这两者则存在区别 对于产品 UI 则不仅仅包括 GUI 还包括产品硬件部分的测试
  • 设计模式(3)--对象结构(5)--外观

    1 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口 这个接口使得 这一子系统更加容易使用 2 两种角色 子系统 Subsystem 外观 Facade 3 优点 3 1 对客户屏蔽了子系统组件 减少了客户处
  • 设计模式(三)-结构型模式(4)-组合模式

    一 为何需要组合模式 Composite 在代码设计中 有种情况是对象之间存在层次关系 即对象之间会存在父结点和子结点的关系 比如在文件管理系统中 所有文件和文件夹形成树状结构 文件夹目录里存在子文件夹和文件 文件夹属于枝结点 文件属于叶结
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • 自动化测试面试题(附答案)

    1 自动化代码中 用到了哪些设计模式 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2 什么是断言 Assert 断言Assert用于在代码中验证实际结果是不是符合预期结果 如果测试用例执行失败会抛出异常并提供断
  • 独立搭建UI自动化测试框架分享

    今天给大家分享一个selenium testng maven ant的UI自动化 可以用于功能测试 也可按复杂的业务流程编写测试用例 今天此篇文章不过多讲解如何实现CI CD 只讲解自己能独立搭建UI框架 如果有其他好的框架也可以联系我 分
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • element ui backTop源码解析-逐行逐析

    backTop 回到顶部 组件简介 基础概念 返回页面顶部的操作按钮 代码
  • element ui backTop源码解析-逐行逐析

    backTop 回到顶部 组件简介 基础概念 返回页面顶部的操作按钮 代码
  • 界面控件DevExpress WPF属性网格 - 让应用轻松显示编辑各种属性事件

    DevExpress WPF Property Grid 属性网格 灵感来自于Visual Studio Visual Studio启发的属性窗口 对象检查器 让在WPF应用程序显示和编辑任何对象的属性和事件变得更容易 P S DevExp

随机推荐

  • Python基础 - os.walk()详细使用

    Python os walk 详细使用 转自 Python os walk 详细使用 小菠萝测试笔记的博客 CSDN博客 os walk 方法简单介绍 主要用来遍历一个目录内各个子目录和子文件 是一个简单易用的文件 目录遍历器 可以帮助我们
  • 手动配置DHCP服务

    目录 一 安装DHCP服务 编辑 二 更改网卡配置 配置网卡信息 3 配置ensp SW2配置 SW1配置 一 安装DHCP服务 进入 进入dhcp的配置文件中进行配置 vim etc dhcp dhcpd conf 这里面是空文件 但是会
  • QT day 1

    作业 widget cpp include window h include
  • Python(1)生成目录及超链接

    Python 1 生成目录及超链接 coding utf 8 import xlsxwriter 导入模块 import os 新建txt文档 f open PCL bat a f write echo off f write ntree
  • 【C语言】函数栈帧的创建和销毁

    目录 1 函数栈帧的含义 概念 要用到的汇编语言的知识 示例 2 理解栈帧 2 1 main函数栈帧的创建 2 2 局部变量的创建 2 3 函数传参 2 4 调用函数 2 5 函数返回 一个 c文件在调用函数的时候 包括main 函数 其内
  • 会议OA项目进度(一)

    目录 前言 一 原型图业务介绍 数据库表结构 二 编码 发布会议 前言 前面的分享告一段落 从本篇文章开始将开始一个比较简易的会议OA系统 为什么要开发OA会议管理 会议是公司日常管理的重要手段之一 为了更好的协调部门与部门之间 员工与员工
  • 设计模式——合成复用原则

    文章目录 合成复用原则 设计原则核心思想 合成案例 聚合案例 继承案例 优缺点 合成复用原则 原则是尽量使用合成 聚合的方式 而不是使用继承 设计原则核心思想 找出应用中可能需要变化之处 把它们独立出来 不要和那些不需要变化的代码混在一起
  • win10如何查看文本文件的编码

    1 记事本查看 用记事本打开文本文件 点击另存为 在弹出的对话框可以看到编码 如上图 当前编码是UTF 8 2 Notepad 查看 用Notepad 打开文本文件 点击菜单栏的编码 在弹出的菜单可以看到编码 如上图 当前编码是UTF 8
  • CMakePackageConfigHelpers 用cmake建立自己的package

    CMakePackageConfigHelpers 用cmake建立自己的package CONFIGURE PACKAGE CONFIG FILE
  • osgEarth的Rex引擎原理分析(一一七)无法加载部分tif文件的原因

    目标 一一六 中的问题204 tif文件的坐标系与rex的坐标系不一致 导致转换失败 解决办法 缺少proj dll 将此文件拷贝到gdal dll文件所在路径即可 待继续分析列表 9 earth文件中都有哪些options 九 中问题 1
  • 查询 mysql所有表名

    select name from sysobjects where type U select from information schema tables select name from sys tables go
  • 算法题:MakeChange

    算法题 MakeChange 一 题目 二 代码 三 运行结果 一 题目 二 代码 def Make pur return pur type pur dict M ONEH 100 FIFTY 50 TWEN 20 TEN 10 FI 5
  • python官网下载安装教程

    1 进入官网 选择自己所需要的版本 官网地址 https www python org downloads 2 选择对应系统的安装包下载 3 下载完成 点击安装包进行安装 配置 不建议安装在C盘 4 确认python是否安装成功 cmd输入
  • img标签引用图片资源无法显示的问题

    概述 主要解决无法引用网络图片与加载本地图片的问题 1 无法引用网络图片 如
  • hackme靶场(getshell)

    靶机 https download vulnhub com hackme hackme ova下载完成是这么个玩意儿 靶场搭建 打开虚拟机 主页 打开虚拟机 也可以在文件 位置点击打开虚拟机 找到刚才下载好的文件点击打开 建议别装C盘 先新
  • 算法高级(17)-SpringCloud中的负载均衡算法

    前面讲的负载均衡技术实际上都是服务端负载均衡 一个请求需要被发送到哪台服务器做出响应 是由我们的服务器决定的 而在SpringCloud中 采用的缺是客户端负载均衡技术 那么客户端负载均衡的优势到底在哪里 以及客户端负载均衡跟服务端负载均衡
  • less语法详解

    1 less的定义 less是一个CSS预处理器 可以为网站启用可自定义 可管理和可重用的样式表 做为 CSS 的一种形式的扩展 它并没有减少 CSS 的功能 而是在现有的 CSS 语法上 为CSS加入程序式语言的特性 以便可以通过Web浏
  • layui获取下拉列表select的值

    HTML
  • 安装office2007安装程序找不到office.zh-cn\*三种详细解决方法

    运行Office 2007安装程序 没想到安装并不顺利 竟然在开始安装时就提示 找不到Office zh cn 而在安装目录下明明就有这个文件啊 为什么总是提 示找不到文件呢 其实归根结底主要是Visual Studio Authoring
  • 三层架构与MVC谜团之答案揭晓

    我们平时总是将三层架构与MVC混为一谈 殊不知它俩并不是一个概念 下面我来为大家揭晓我所知道的一些真相 首先 它俩根本不是一个概念 三层架构是一个分层式的软件体系架构设计 它可适用于任何一个项目 MVC是一个设计模式 它是根据项目的具体需求