`

从MVC与三层架构谈到优化架构提高Web效率

阅读更多
上次炮轰过了MVC,今次又来炮轰三层架构,感觉自己像是在到处贴大字报的红卫兵^_^,不过理不辨不明,希望我的砖头能引来更加精辟的阐述。
    说道3层架构,MVC其实是因为看到某男给我看他的概要设计书引出来的,因为此君很能够代表很多的刚入门的开发者,他所经历的误区,可能很多开发者都会经历(也包括我自己,当年干过很多傻事)。从历史沿革上来说,MVC和分层设计是没有交集的,很多时候很多人会觉得这样也好,那样也好,于是就把两个概念混淆起来,于是某君的概要设计书就写成这样子:
......本系统是典型的3层架构设计,采用MVC模式......
    这里不是说3层不好或者是MVC不好,不过起码需要先搞清楚何为3层,何为MVC才能说两者能不能结合起来或者怎么结合起来,不过在这个ORM(其实ORM也是个概念而已,不管你是代码生成器,组件还是自己动手写)横行的年代,3层的意义已经被淡化了。我们首先来看看3层架构的概念是怎么回事。一般意义上的3层就是表现层,业务逻辑层,数据操作层。没层之间是一种垂直的关系,换言之可以很直观的表现在很厚的调用栈上。其实是从网络分层的概念上借用来的。在网络每个层次都是一个协议栈,上层协议和下层协议因为层次间的接口的稳定而存在一种弱耦合的情况,上层协议是不会关心底层协议是什么的。所以程序上的3层架构就是为了实现弱耦合而出现的,对于页面来说业务逻辑的实现是透明的,对于业务逻辑来说,数据操作的细节是透明的,然后可以分开让不同的程序员去实现。so,看起来是个不错的馅饼,不过面临的问题也很简单,长长的调用栈,效率的降低,和扩展的复杂,每次扩展功能我们都需要重新编译部署整个业务逻辑层的Dll,和Site,但是这时要看适用范围的,很多时候,网站的逻辑都是相当的简单的,读表,填充Grid完毕。这样子的逻辑都要在业务逻辑里跑一次,其实协议个方法出来里面却只有一行,或者几行代码,其实就是转发一下数据层的结果。老实说如果是做个新闻发布的系统的话,业务逻辑层几乎通篇都是转发的代码,结果当修改了数据库的时候还要多改几个地方,简直是没事找事啊。还有种情况就是大量使用存储过程,逻辑都在存储过程里去了,结果业务逻辑层武功尽废,彻底沦为一个传声筒。有人说可以在这里验证数据阿,看来也就这点事情了,犯得着写一层膜嘛,是男的都知道多层膜不爽,那你为什么还要用?
    再来看MVC,虽然上次炮轰过MVC(MVP),不过相对千层饼来说,MVC还是要可爱得多。起码更加符合实际情况一些,对于Web来说也比分层更加的合理,MVC是典型的平行关系,没有说谁在上谁在下的关系,模型负责业务领域的事情,视图负责显示的事情,控制器把数据读取出来填充模型后把模型交给视图去处理。而各种验证什么的应该是在模型里处理了。在Web下稍微修改一下也还是比较自然的。很多人把MVC,多层混合起来用,在没搞清楚的情况下很容易就高的不伦不类,其实这个倒不重要,主要是效率和灵活性都降低了,那才是致命的问题。
    Web应用程序执行的效率相关的因素很多,我们这里只来看看架构的改变对数据库操作的影响。
     一种是多层的,每个业务对象都有自己的数据连接,然后造成了什么后果呢,在一个页面上依次打开关闭了N次数据库连接,而这些都是有消耗的,而Web并不是一个用户使用,加入一个页面上有10个连接,同时1000人访问就会在短时间内造成10000次数据库连接开闭的操作。还有一种是趋向单数据库连接(之前有位老兄在http://www.cnblogs.com/ayuan/archive/2007/03/24/686594.html 这篇POST里提过,不过貌似那位老兄把IIS的连接数限制概念搞错了,回头我再去提醒他)。其实这个也是不可取的,这样子会造成在多人访问的时候效率严重下降,因为始终只有一个Connection,在很多人请求的时候就会排起常常的挂起队列,得不偿失。其实我们仔细分析一下Web的工作模式的时候就会发现,首先,对于整个Web应用程序来说,是一个多线程环境,每个Session都有一个工作线程去Handle,每个线程都是隔离的,只有Application是线程间的公共区(所以就算是ASP都对Application提供了Lock和unlock机制,why?线程安全那),但是我们的代码除了静态的部分都是针对每个Session的,所以就这点来说,我们的程序可以看作是单线程的(除开Application和静态相关的代码)。那么其实我们针对每个Session之需要有一个Connection就能达到最优化Connection资源的目的,但是很多时候这样子会牺牲整个站点的结构,而且还有个问题在这里,如果在Session里一直存个打开的连接的话,如果这个用户的Session不回收就无法关闭连接,这个时候就是说,50个用户就要占用50个连接,一般来说SqlServer的连接数是有限的,到时候就不是慢的问题了,再有用户进来就没连接可用了,所以我比较倾向于每个页面放一个Connection,在初始化页面的时候打开,在执行页面结束的时候关闭,这个样子基本上就能达到效率的最优化了,至于业务逻辑我倾向于平行化,成为一系列逻辑的Helper类,里面只处理领域模型(MVC的M,实体类or DataSet),数据操作还是在Controler里,要换数据库怎么办?现在DAAB3.1还有N多的ORM都是支持多数据库的,这里就不用操心了。

继续给自己的组件打广告:
http://www.cnblogs.com/Alexander-Lee/archive/2007/03/30/694049.html  带缓存的哦,巴适得很哦
分享到:
评论

相关推荐

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

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

    MVC.rar_mvc_mvc CSharp_restaurant_三层 CSHARP_餐馆

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

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

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

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

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

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

    此外,通过使用框架(如.NET中的ASP.NET MVC、Spring框架等)可以简化三层结构的实现,提高开发效率。 总的来说,“三层结构”原理是软件工程中的一种经典设计思想,它强调了系统的分层设计,有助于构建稳定、可...

    标准三层架构,asp.net开发,语言c#

    当我们谈到“标准三层架构,asp.net开发,语言c#”时,我们关注的是如何使用C#编程语言在ASP.NET框架下实现这一架构。 1. 表现层(Presentation Layer): 这是用户与系统交互的部分,通常由ASP.NET中的Web Forms或...

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

    .NET三层架构是一种常见的软件设计模式,它将应用程序的复杂逻辑分解为三个独立的层次:表现层(Presentation...通过深入理解并熟练应用三层架构,开发者能够更有效地管理项目,提高开发效率,同时降低长期维护的难度。

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

    1. 浅谈“三层结构”原理与用意.doc - 这可能是一篇文档,详细解释了三层架构的基本原理和设计意图。它可能会涵盖为什么要使用三层架构,以及它在系统设计中带来的好处,如模块化、可扩展性和可维护性。 2. 51aspx...

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

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

    浅谈ASP.NET中多层架构

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

    基于.NET的网络文件存储管理系统设计与实现_文献综述

    综上所述,基于.NET的网络文件存储管理系统的设计与实现涉及到了多种技术栈和设计模式的应用,如ASP.NET、MVC模式、三层架构等,这些技术的应用不仅提高了系统的性能和稳定性,也为未来进一步的技术发展奠定了基础。

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

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

    (完整版)Java系统架构师面试题 (2).docx

    本文总结了Java系统架构师面试题,涵盖了OOP、IOC、AOP、J2EE框架、SOA、ROA、JVM、Java通讯、软件架构、服务器、中间件、WEB服务器、权限分派、负载平衡、数据库设计、项目管理、团队建设等领域,旨在为Java系统...

    浅谈MVC设计模式(示例)

    MVC(Model-View-Controller)设计模式是一种软件架构模式,它将应用程序分为三个主要组件,以实现职责分离,提高可维护性和可扩展性。MVC模式广泛应用于Web开发,特别是在Java领域,如使用Java Servlets、JSP等技术...

    精选答辩PPT (87).pptPPT模板

    Struts 2作为表现层框架,Spring处理业务逻辑,Hibernate负责数据持久化,这三者共同构成了基于MVC设计模式的应用架构,降低了模块间的耦合,提高了系统的可扩展性。 MVC设计模式是软件工程中常用的一种设计模式,...

    cakephp-2.1.2

    首先,让我们从 MVC 架构谈起。MVC 是软件设计中的经典模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。在 CakePHP 中,模型处理数据和业务逻辑,视图负责渲染用户界面,...

    浅谈开发模式技术架构的发展趋势――J2EE技术 (2011年)

    J2EE技术自推出以来,逐渐成为了开发模式技术架构的发展趋势,特别是在三层/多层架构体系中,它提供了诸多优势。 首先,J2EE平台具有一系列优点。由于Java跨平台语言的特性,J2EE在系统集成、性能、可移植性、可靠...

    浅谈J2EE框架和分布式网络管理.pdf

    通过使用Struts框架,J2EE应用能够构建用户界面,它将MVC(Model-View-Controller)架构模式应用于Web应用,使得界面展示、业务逻辑和数据处理分离,提高了应用的可维护性和可扩展性。 2. 业务层:在J2EE中,业务层...

    Struts2 技术内幕读书笔记(1)

    - **Struts2**:一个MVC框架,主要用于构建Web应用的表示层。 - **Spring**:一个轻量级的框架,用于管理业务层组件。 - **Hibernate**:一个ORM框架,用于实现持久层逻辑。 ##### MVC模式 MVC(Model-View-...

Global site tag (gtag.js) - Google Analytics