`
moyue
  • 浏览: 25723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MVC和三层架构

    博客分类:
  • J2EE
阅读更多

    看到坛子里有人讨论mvc,我也说说我对mvc的看法,顺带三层架构。

 

    关于mvc的概念我就不多说了,mvc的应用很广,不仅仅在web开发中,swing就是基于mvc开发的一个GUI界面库,所以有人说mvc是观察者模式的一个变种,也没错,如果有开发过swing的同学们肯定能理解这个,swing中的事件处理就是观察者模式,但在web开发中的mvc 有点不同。GUI界面程序一般都是基于事件驱动的,而传统的web开发是基于请求响应的,现在也有基于事件驱动的web开发框架,比如JSF和ASP.NET。

 

    基于事件驱动,这个很好理解观察者模式,组件注册动作监听器,有动作发生时,组件响应。这里面,组件是观察者,组件不依赖于动作的发生,动作的发生是未知的,组件不可能一直占用线程资源监测动作的发生。而有动作发生时,如果组件注册了对某个动作的监听器,那么组件就响应。关于这些,我改天重新开贴说明,此贴的重点不在这。

 

    而对于基于请求响应的web开发,以J2EE开发为例,这里面Servlet就是一个观察者,servlet注册了对某一url的监听,当有属于自己监听的url请求时,servlet对这个请求进行响应。也就是说web开发本身就是一个观察者模式,只不过一般没人这么提罢了。

 

    在说MVC之前,我们先说说三层架构,如果没有三层架构,那么我们的开发可以这样形容:一竿子通到底。 从参数的检测,业务逻辑的组装,数据库的访问都在一起,写着费劲,维护就更是噩梦了。慢慢的,你可能自己抽出一些类,其实也就是慢慢有了三层架构的雏形。三层架构:表现层,业务层,持久层。从字面意思你都能知道三个层各自的作用。业务逻辑清晰了,持久访问清晰了,表现层清晰了吗?依然没有。


    在web开发中,尤其是现在的web开发,表现层不再是java程序员就能搞的定的,除非你是万金油。在多工种的合作开发中,我们需要这样一种思路:界面,控制器,模型分开开发。由控制器决定调用哪些模型完成业务,调用哪个界面显示。这似乎正是MVC。MVC只是表现层上的一种解决方案,不是一个项目的解决方案。总有人那电脑主机来比喻MVC,把CPU比做控制器,我不是说不能这么比,个人理解不一样嘛。但我们要知道,CPU不仅仅是资源调度这么简单,还有业务运算等更重要的事。


    对于MVC,它从来也不是三个层,而是某一层的三个方面,在我的开发中,团队成员交流时,我直接限定不能说视图层,控制层,模型层,必须说视图,控制器,模型。可能有人会觉得这个很搞笑,但我们要注意,有些东西说的多了在心里就根深蒂固了,理解上也就有了不一样的意思了。


    有人在坛子上说控制器越来越臃肿,为什么会臃肿,你把业务逻辑都写进控制器了能不臃肿吗?一个火车调度员还要负责怎么具体让信号设备正常显示,他不累么,动车能不出事吗?呵呵,说笑了,但我的意思很明确,控制器就是控制器,不是业务逻辑,控制器调用业务逻辑,而不是实现业务逻辑。


    对于MVC中的模型,就是业务逻辑的组合,我曾被人误导理解成和数据持久一样的东西,导致我的控制器就只能是业务逻辑了。模型就是对某一事物的解决方案,它由很多逻辑组成,而某些逻辑还有数据持久等。 

 

     我们以jsp+servlet+javabean开发为例说明下:

   曾几何是,jsp是视图,servlet是控制器,javabean是模型,这种说法不管是书中还是网络上都大有文章,我这里不是说这是错误的,而是个人理解的角度不一样。 站在项目的角度上,控制器是谁,是web.xml,为什么,因为你的url映射是在web.xml中,由web.xml决定调用那个servlet,(自定义映射关系的不算)而此时的servlet充当的正是模型的角色,因为是它在组合业务逻辑,但同时,servlet也充当控制器,因为由它来决定显示按个视图,关系是不是有点复杂啊。

站在业务逻辑的角度上,控制器是servlet,因为servlet决定调用那个业务逻辑,显示那个视图。此时的模型是谁呢?这要看代码的写法了,如果你把解决此次访问的业务逻辑放在一个类中,那么这个类就是模型,servlet控制器只要调用这个类就行了; 如果你把这些业务逻辑放在servlet的service()方法中,那么此时的servlet也充当了模型的角色。

 

    使用表现层的一些框架,有助于我们加深对MVC的理解,以Struts1为例,dispatchAction充当了控制器的角色,具体看struts-config就能得知, dispatchAction 对请求进行分发,并负责响应的视图显示,而你的action正是模型,分发的请求由相应的action模型来处理。 

分享到:
评论
1 楼 jinnianshilongnian 2012-03-02  
我的理解是  action  是 Page Controller  不是Model

相关推荐

    案例-基于MVC和三层架构实现商品表的增删改查

    这个示例可能演示了如何在MVC和三层架构下处理品牌相关的业务,如添加、编辑或删除品牌。 总的来说,这个案例将帮助开发者理解如何在实际项目中运用MVC模式和三层架构,以实现高效且易于维护的Web应用。通过这种...

    基于ASP.NET MVC3与三层架构的电子商城源码2012929

    基于ASP.NET MVC3与三层架构的电子商城源码 功能介绍: 本代码完全基于ASP.NET MVC3+EF+三层构架,主要功能分为: 所有页面美工均为作者独立完成,系统开发于1年前,稳定运行良好。 系统目前通过几乎所有PC端...

    MVC 三层架构示例

    **MVC 三层架构示例** 在软件开发中,MVC(Model-View-Controller)模式是一种广泛应用的设计模式,尤其在Web开发...在.NET C#环境中,利用ASP.NET MVC和三层架构,我们可以构建高效、稳定且易于扩展的Web应用程序。

    基于MVC设计模式和三层架构的设备维护配送实时监控系统研究与实现代码

    本项目——“基于MVC设计模式和三层架构的设备维护配送实时监控系统研究与实现代码”,旨在展示如何利用这两种主流的设计模式来构建一个功能完善的实时监控系统。下面将详细阐述这两个设计模式以及相关技术在系统中...

    ASP.NET网络购物加后台加三层架构(Web)

    提供的源码“网络购物三层架构(Web)”很可能包含了ASP.NET的Web Forms或MVC项目结构,包含了HTML、CSS、JavaScript文件,以及C#的后台代码和SQL Server的数据库脚本。源码中可能会有DAL(数据访问层)类库,BL(业务...

    C# .net mvc 三层架构 增删改查

    在.NET开发领域,C#与ASP.NET MVC框架的结合常用于构建高效、可维护的Web应用程序。本项目涉及的核心知识点...以上就是关于“C# .NET MVC 三层架构 增删改查”这个主题的详细解释,希望对你理解和实践Web开发有所帮助。

    ASP.NET一个基于MVC三层架构的很好的例子(VS2008)

    ASP.NET MVC是一个强大的Web开发框架,它为开发者提供了构建可维护、高性能的Web应用程序的工具。...通过深入研究这个例子,你将能够更好地理解ASP.NET MVC和三层架构,为将来开发更复杂的Web应用打下坚实的基础。

    MVC模式与三层架构区别

    虽然MVC和三层架构都是为了实现模块化和解耦而设计的,但它们的关注点有所不同。 - **MVC关注于表现层**:MVC模式是表现层的一种设计模式,用于组织用户界面和处理用户输入。它将UI层进一步细分为模型、视图和控制...

    三层架构+MVC+Linq to SQL 入门实例,

    本程序主要通过一个产品的添加、修改及用户注册登录等来演示MVC的使用,主要针对 MVC和三层架构入门人员 数据实现了列表并分页 App_Data下为Sql2005数据库,采用的是|DataDirectory|\方式调用,直接使用即可

    基于MVC设计模式和三层架构的设备维护配送实时监控系统研究与实现

    【基于MVC设计模式和三层架构的设备维护配送实时监控系统研究与实现】是一篇针对设备管理和监控领域的本科毕业设计论文。这篇论文详尽阐述了系统设计与开发的全过程,旨在构建一个能够实时监控设备维护和配送状态的...

    ASP.NET MVC 三层架构与mvc实例

    总结来说,"ASP.NET MVC 三层架构与mvc实例"是一个结合了ASP.NET MVC框架和三层架构思想的BBS系统开发示例,利用这种架构,开发者可以清晰地组织代码,实现数据库操作,同时通过Ajax技术优化用户界面。通过学习这个...

    ASP.NET三层框架+MVC模式项目实现增删改查实例,适合 新手

    ASP.NET是一种基于.NET ...总结来说,这个项目为初学者提供了一个实践ASP.NET MVC和三层架构的平台,通过实现对"user"表的CRUD操作,帮助理解Web应用的基本结构和工作原理,是学习和提升.NET开发技能的好素材。

    三层架构mvc

    MVC 和三层架构的关系是,MVC 可以被视为三层架构中表现层的一个子框架。在三层架构中,MVC的Model对应于ViewModel,View对应于表现层的用户界面,Controller则与业务逻辑层的一部分职责相重叠,负责协调视图和模型...

    工厂模式和三层架构实例

    总的来说,工厂模式和三层架构是软件开发中重要的设计原则和架构模式,它们能帮助我们构建可维护、可扩展的系统。在.NET环境中,结合这两种模式可以构建出高效、灵活的解决方案,便于团队协作和后期的系统维护。

    MVC与三层架构

    在软件开发领域,MVC(Model-View-Controller)架构模式和三层架构(UI-BLL-DAL)是两种广泛采用的设计模式,它们分别在不同的应用场景下展现出了各自的优势。下面,我们将深入探讨这两种架构模式的区别,以及如何...

    MVC+三层架构+EF的增删改查操作(连接数据库的).rar

    在提供的示例中,"MVC+三层架构+EF的增删改查操作(连接数据库的)"是一个实际的应用程序演示,它结合了MVC模式和三层架构,用于展示如何使用ASP.NET MVC、三层架构和Entity Framework进行数据库操作。这个demo可能...

    MCV和三层构架的具体实例

    这些实例可以帮助开发者更好地理解MVC和三层架构的工作原理,以及它们如何协同工作以提高代码的可维护性和可扩展性。 例如,MVC框架可能包含了模型类(如UserModel)、控制器(如UserController)和视图(如...

    asp.net mvc项目源码

    这个源码包显然包含了一个使用ASP.NET MVC和三层架构开发的项目实例。三层架构通常指的是数据访问层(DAL)、业务逻辑层(BLL)和表示层(UI),这种架构设计有助于分离关注点,提高代码的复用性和可测试性。 `...

    ASP.NET租房网(三层+MVC4)后台管理系统源码.rar

    ASP.NET租房网后台管理系统源码是一个...总的来说,ASP.NET租房网后台管理系统源码是一个宝贵的教育资源,它提供了实践和学习ASP.NET MVC和三层架构的实际场景,有助于开发者提升技能,更好地应对实际工作中的挑战。

Global site tag (gtag.js) - Google Analytics