`

浅谈三层架构与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模式可以较为随意。
分享到:
评论

相关推荐

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

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

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

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

    浅谈框架与MVC

    ### 浅谈框架与MVC #### 架构的重要性及概念 在软件开发领域,架构设计扮演着至关重要的角色。良好的架构设计不仅能够确保软件系统的稳定性、可维护性和可扩展性,还能提升团队协作效率。正如文章所述,“好的产品...

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

    本文将深入探讨三种常见的设计模式:Model-View-Controller(MVC)、Model-View-Presenter(MVP)和Model-View-ViewModel(MVVM)。这些模式在构建用户界面时起着至关重要的作用,尤其是在Web和移动应用开发中。 ...

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

    .NET三层架构是一种常见的软件设计模式,它将应用程序的复杂逻辑分解为三个独立的层次:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。这种架构模式的主要...

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

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

    深入浅出谈ASP.NET三层架构

    ASP.NET三层架构是一种常见的软件设计模式,它将应用程序分为三个主要部分:表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种架构有助于提高代码的可维护性、可扩展性和可重用性。以下是对这个主题的详细...

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

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

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

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

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

    三层架构的业务逻辑层与MVC的模型层有一定的对应关系,但MVC的Controller在处理用户请求和协调Model与View方面起着关键作用。 在实际开发中,选择哪种架构取决于项目需求、团队规模和开发效率。对于小型项目,二层...

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

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

    MVC.rar_mvc_mvc CSharp_restaurant_三层 CSHARP_餐馆

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

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

    ### 浅谈模型-视图-控制器(MVC)模式 #### 一、MVC模式简介 MVC(Model-View-Controller),即模型-视图-控制器模式,是一种广泛应用于软件开发领域的设计模式,特别是在桌面应用和Web应用程序中。这种模式的...

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

    JavaScript前端开发中的MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)是两种常见的设计模式,它们分别用于构建可维护性高、结构清晰的Web应用程序。MVC模式最早由Trygve Reenskaug在Smalltalk-80中...

    浅谈ASP.NET中多层架构

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

    浅谈SSH学习要点

    在本篇文章中,我们将深入探讨这三个组件的核心概念和进阶用法,帮助初学者更好地理解和掌握SSH框架。 首先,我们来看Struts,它是MVC框架的代表之一。基础部分,你需要理解Action、ActionForm和配置文件。Action是...

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

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

Global site tag (gtag.js) - Google Analytics