`

[转]浅谈三层结构与MVC模式的区别

阅读更多
有朋友谈到三层与MVC的区别,以前也有人抛出这个问题,本人对来公司面试的朋友也偶乐会提这方面的问题。

那么我也来讲讲我对这两者的理解吧。

首先对这个题目,本身是存在问题的,“XX结构”与“XX模式”的区别?请问中国社会制度与美国人生活方式有什么区别?

这两者本身讲的是不同方向与角度的问题,在实际应用中他们的确存在一些相似的特点,在很多书籍中也没有深入讲解,以致于造成困惑,为了更好的理解他们,姑且来说说区别吧。

首先N层结构是一种软件抽象的层次结构,是对复杂软件的一种纵向切分,每一层次中完成同一类型的操作,以便将各种代码以其完成的使命作为依据来分割,以将低软件的复杂度,提高其可维护性。一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前,上层代码是无法开发的,下层代码接口(契约)的变化将使上层的代码一起变化。三层结构是N层结构的一种,是人产在长时间使用中得出来的一种应用场合广泛的N层结构,被当作一种典型的软件层次结构而广为流传甚至写入教科书。

MVC模式是一种复合设计模式,一种在特定场合用于解决某种实际问题来得出的可以反复实践的解决方案。巧合的是他也有三个事物组成,于是乎人们就有了一种想当然的对应关系:展示层-View;业务逻辑层-Control;持久层-Model。首先MVC中的三个事物之间并不存在明显的层次结构,没有明显的向下依赖关系,相反的,View和Model往往是比较独立的,而Control是连接两者的桥梁,他们更像是横向的切分。这样一来就出现一个结果,MVC中每个块都是可以独立测试的,而三层结构中,上层模块的运行测试势必要提供下层代码或者提供相同接口的桩。相对来说,MVC复杂得多,但是结构更清晰,耦合性更低。

另外,MVC中每一块内部特别是Model内部经常被设计为多层的。在我认为的一个良好的MVC模式构建的结构中,Control是核心,小且较为稳定的,可以作为一个核心框架来提供,有扩展点,但基本上可以简单配置不需要任何代码就可以运行。而View则可能是一套或多种可选择的视图引擎,决定了软件展示给用于的界面,使用时的主要工作量在于扩展点以及根据需要而数量不同的视图模板。Model则是业务提供者,决定了软件提供的功能,其内部可能是一些普通的类或者是实现了某些接口的类,在这一块当中可能根据业务的不同而色彩缤纷,对于复杂的软件可能会分成很多层,如业务逻辑层、业务提供层、系统提供层、数据提供层、数据访问层等。

我经常用于比喻MVC的例子是小时候玩的那种卡带式游戏机,Control是主机,一般来说我买一个主机就行了,只要他不坏,他就能一直让我玩这一类的游戏。View则是电视机和游戏手柄,电视机可以独立工作,他不管输入的是电视信号、影碟机信号还是游戏机信号,他只管显示,而且他决定了我们看到的效果是怎么样的,如果我想要个尺寸更大的或者彩色的显示效果,我只需要买个相应的电视机就行了,手柄也是可以换的,要遥杆还是带震动的。Model则是游戏卡带,他绝定了我玩的是什么游戏,是魂斗罗还是超级玛莉,而且游戏机主机和电视机生产厂家永远也不知道在上面有可能会运行什么样的游戏。卡带中可能会有游戏代码和存储单元,都根据游戏的需要而设计。

有朋友提到游戏主机提供的卡带插槽的接口,在设计中,有时也由Control提供一组接口,以用于Model或View的实现,这样就形成了依赖。一般来说这样设计也没有太大的问题,只是会提高模块间的耦合度,也会带来一些侵入性。为了更完美,可以不用接口来提供契约,可以用配置信息(或称元数据信息)+反射来提供契约,那么这个类接口就可以退化到只要符合CLS就可以了,也就是普通的类,就像现在的计算机接口广泛采用USB,无论是U盘、打印机、扫描仪或者是加密狗,他们都是普通的USB设备而已。

提到USB有一个题外话,模块的可插拔性设计甚至是热插拔设计,系统可以在不停止运行的情况下动态的挂载或移除模块,动态挂载模块需要系统能够自动发现新模块并根据自描述的信息进行自动配置,移除可能情况更复杂一点,需要“安全删除硬件”类似的功能。

在设计广泛重用的框架时会考虑多种情况以达到更大的适应性,一般项目中应用MVC模式可以较为随意。
分享到:
评论

相关推荐

    浅谈三大模式(mvc,mvp,mvvm)

    首先,我们来理解MVC模式。Model代表应用程序的数据模型,负责存储和管理数据;View是用户界面,用于展示数据;Controller作为两者之间的桥梁,处理用户输入并更新Model,同时更新View以反映Model的变化。MVC的优势...

    《浅谈三层结构》示例代码

    文档"浅谈“三层结构”原理与用意.doc"可能深入解析了三层架构的设计理念,包括为何要采用三层结构、它的优点和适用场景。而"CodePackage"可能包含了实现三层架构的示例代码,可能包括ASP.NET Web Forms或MVC的页面...

    浅谈模型-视图-控制器(MVC)模式

    1. **清晰的分层结构**:MVC模式通过将应用程序分为模型、视图和控制器三个层次,使各个组件之间的职责更加明确,便于开发人员理解和维护代码。 2. **易于扩展和修改**:由于模型、视图和控制器之间的解耦合,可以...

    《浅谈三层结构》示例代码.rar

    标题中的“《浅谈三层结构》示例代码.rar”表明这是一个关于三层架构的讨论,并且包含实际的代码示例。这通常意味着我们将看到如何在实践中实现这一架构。 描述虽然没有提供具体信息,但我们可以推测这可能是一个...

    浅谈.net三层结构原理与用意

    总的来说,.NET三层结构是一种实用的软件设计模式,它有助于构建大型、复杂的企业级应用,确保代码的可读性、可维护性和可扩展性。通过深入理解并熟练应用三层架构,开发者能够更有效地管理项目,提高开发效率,同时...

    浅谈“三层结构”原理与用意

    三层结构是一种常见的软件架构设计模式,它将应用逻辑分为了三个主要部分:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。这种设计模式的主要目的是提高...

    浅谈“三层结构”原理与用意(附源码).rar

    附件中的"浅谈“三层结构”原理与用意(附源码)"文档和源码,提供了一个具体的应用实例,可以帮助读者更好地理解和实践三层架构。通过阅读和分析这些材料,开发者能够掌握如何在ASP.NET+C#环境中运用三层架构进行...

    浅谈ASPNET三层结构》示例代码

    ASP.NET三层架构是一种常见的软件设计模式,用于组织和分离应用程序的业务逻辑、数据访问和用户界面层。这种架构模式能够提高代码的可维护性、可重用性和可扩展性,对于大型项目尤其重要。让我们深入探讨一下这个...

    浅谈MVC架构在DotNET WinForm中的应用(C#)

    同时,文档 `浅谈MVC架构在DotNET WinForm中的应用(C#).doc` 应该提供了理论背景和详细的步骤指导,帮助我们理解和实践 MVC 设计模式。 总之,MVC 架构为 DotNET WinForm 应用提供了强大的设计思路,使得开发者可以...

    浅谈JavaScript前端开发的MVC结构与MVVM结构

    MVC模式最早由Trygve Reenskaug在Smalltalk-80中提出,后来在《Design Patterns: Elements of Reusable Object-Oriented Software》一书中被广泛推广。MVC将应用分为三个主要部分:Model、View和Controller。 1. ...

    MVC.rar_mvc_mvc CSharp_restaurant_三层 CSHARP_餐馆

    浅谈“三层结构”原理与用意.doc文档可能会详细讨论三层架构的设计原则和优点,比如提高了代码的可重用性、可测试性和可维护性。通过将不同职责的代码分开,开发者可以专注于各自领域的任务,提高开发效率。 ...

    【ASP.NET编程知识】浅谈ASP.NET中多层架构.docx

    本文将深入探讨ASP.NET中的多层架构,包括二层架构、三层架构以及MVC模式,分析它们各自的特点和适用场景。 首先,二层架构是将应用程序分为两个部分:用户界面层和数据访问层。这种架构简单明了,用户界面直接与...

    浅谈MVC设计模式(示例)

    MVC模式广泛应用于Web开发,特别是在Java领域,如使用Java Servlets、JSP等技术。 - **Model(模型)**:模型组件负责数据处理和业务逻辑。它封装了应用程序的状态,响应状态查询,并包含了与应用相关的所有功能。...

    浅谈基于FPGA的相控阵雷达波束控制系统设计.pdf

    为了实现这些目标,软件开发人员需要对层模式结构、管道和过滤器结构以及MVC模式进行深入分析和理解。在开发过程中,利用这些模式可以增强软件系统的模块化、灵活性和可维护性,从而提高软件开发的整体水平。 文章...

    浅谈SSH学习要点

    SSH框架,全称为Struts+Spring+Hibernate,是Java企业级开发中常用的一种技术栈,主要用于构建基于MVC(Model-View-Controller)设计模式的Web应用。在本篇文章中,我们将深入探讨这三个组件的核心概念和进阶用法,...

    浅谈MVC框架的优点(翻译)

    【浅谈MVC框架的优点(翻译)】 MVC(Model-View-Controller)框架是一种广泛应用于Web开发的设计模式,旨在提高代码的可读性、可维护性和可测试性。本文将探讨MVC框架相对于传统ASP.NET Web Forms的一些优势。 **...

    浅谈ASP.NET中多层架构

    - MVC与三层架构的区别在于,三层架构的UI、BLL和DAL的划分更侧重于数据处理流程,而MVC则更注重于用户交互和数据呈现的分离。 在实际开发中,选择哪种架构取决于项目的规模、需求的复杂性以及团队的组织结构。...

Global site tag (gtag.js) - Google Analytics