浅谈ASP.NET中多层架构

   Asp.net的多层架构主要是为了解决数据层,逻辑层,表示层等之间的关系。我的做法是这样的:首先建立一个DataCore的基类。基类里面封装了一些低层的数据库的基本操作,比如说数据库联接,调用存储过程等等。

  很多人对开发多层应用程序感到一定的困难。来看一个例子:对于一个只有一两个人的小公司,一个人可能同时担当老板、出纳、会计、市场、销售、开发等多项工作。而对于一个大公司,就会进行比较严密的分工,每个人只完成一部分工作,需要彼此配合才能保证正常运转。以前的开发程序就类似于一个小公司,从用户界面到数据库访问等所有功能都在一个页面内完成,这样的缺点有:

  1. 开发起来比较困难,很难实现多人协作开发

  2. 一旦数据库或规则有变,就可能要重新修改整个页面,加大维护成本

  3. 因为所有功能都混合在一起,程序重用性差。如果开发一个新项目,几乎要重写代码

  为了解决这个问题,人们就提出了“多层应用程序”概念,其本质类似于一个职权明确的大公司,对页面进行分工,将数据访问、业务规则等功能都放在专门的文件中。比较流行的有二层架构、三层架构和MVC。

  一. 二层架构

  二层架构,就是将程序分为用户界面层和数据访问层。其本质是将访问数据库的代码放入数据访问层中,而用户界面层通过数据访问层对数据库进行操作。 相互作用关系如下:("<--->"表示双向箭头)

  用户界面 <---> 数据访问 <---> 数据库

  二. 三层架构

  三层架构,即将二层架构中的业务逻辑从数据访问层中分离出来,成为一个单独的业务逻辑层。将程序分为三层后,数据访问层就只管对数据库进行操作,而业务逻辑层负负责对数据进行各种处理。

  从顶层上主要包含了4个部件:DAL(数据处理层)、BLL(业务逻辑层)、UI(用户接口层)、Model(实体模型)。其中前三者就是人们常说的三层结构。

  1)数据访问层(database access layer,DAL):有时候也称为是持久层,其功能主要是负责数据库的访问。简单的说法就是实现对数据表的Select,Insert,Update, Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化;

  2)业务逻辑层(business logic layer, BLL):是整个系统的核心,它与这个系统的业务(领域)有关;

  3)表示层(user interface layer, UIA):是系统的UI部分,负责使用者与整个系统的交互。在这一层中,理想的状态是不应包括系统的业务逻辑。表示层中的逻辑代码,仅与界面元素有关;

  4)实体模型层(Model):包含了所有的数据信息,这些数据信息以各种Entity实例的形式存在。是整个系统基础层次;


  完善的三层结构应该是:修改表示层而不用修改逻辑层,修改逻辑层二不用修改数据访问层。达到一定程度上的解耦。

  三层架构主要是使项目结构更清楚,分工更明确,有利于后期的维护和升级。它解决了整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,使程序员更加专注的处理某阶段的业务逻辑。然而未必会提升性能,因为当子程序模块未执行结束时,主程序模块只能处于等待状态。这说明将应用程序划分层次,会带来其执行速度上的一些损失。但从团队开发效率角度上来讲却可以感受到大不相同的效果。

  需要注意的是,虽然三层架构有很多的好处,但如果你的程序很简单,或者将来肯定不会重用,或不一定要采用两层架构,也许采用两层或普通的程序开发速度会更快。要根据实际情况具体处理。

  三. MVC

  M 即Model(模型层),主要负责出来业务逻辑以及数据库的交互;

  V 即View(视图层),主要用于显示数据和提交数据;

  C 即Controller(控制器),主要是用作捕获请求并控制请求转发;

  MVC是在应用程序(BS结构)的视图层划分出来的不同功能的几个模块,主要是为了解决应用程序用户界面的样式替换问题,把展示数据的 HTML 页面尽可能的和业务代码分离。

  四. 三层结构与MVC的区别

  区别的话,看图就能明白:


  图2. MVC 与 三层架构的区别

  三层架构是界面层(UI)业务逻辑层(BLL)和数据访问层(DAL)构成的,而MVC是模型层(M)界面层(View)和控制层(Controller)构成的,而且他们之间也不对应。

  如果硬要给他们对应的话,那么三层架构中的UI对应MVC中的view都是用于显示以及获取界面的数据;三层架构中的BLL层和DAL层对应MVC中的Model层都是用于处理上层传递来的数据以及从数据库获取的数据的;MVC中的Controller最多算是三层架构中的UI的一部分。

  五. 三层架构引用关系

  Model层:不引用任何项目;

  DAL层:引用Model,通过读取web.config里的程序集,加载类的实例,返回给BLL使用;

  BLL层:引用Model,DAL;

  UI层:引用Model, BLL;

  方法是在资源管理器中右击项目文件,添加引用。在弹出的对话框中选中项目标签,选择适当的类库后点击确定。然后再在项目文件中添加using “引用类的命名空间”。

  项目已经添加了引用,但仍然找不到指定类库文件,可检查:

  1. 引用的项目中是否有语法错误,是否在头文件中添加using “命名空间”;

  2. 添加的类库时,是否该类库为public。

  以上所述就是本文的全部内容了,希望大家能够喜欢。

时间: 2024-09-13 00:57:12

浅谈ASP.NET中多层架构的相关文章

浅谈ASP程序设计中数据库文件调用的捷径

程序|设计|数据|数据库 引言 本文针对ASP程序设计中最基础.也是最关键的部分"数据库文件的调用"进行说明,同时谈谈ASP程序设计中数据库文件调用的一些技巧. ASP简介 ASP(Active Server Pages)是微软于1996年推出的Web应用程序开发技术,它是一种脚本语言.ActiveX组件及HTML语言等的综合,微软把它描述为"一个服务器的脚本环境,在这里可以生成和运行动态的.交互的.高性能的Web服务器应用程序".其主要功能是为生成动态的.交互式的

浅谈ASP.NET中最简单的自定义控件

这篇文章主要简单介绍了ASP.NET中最简单的自定义控件,以及核心代码示例,需要的朋友可以参考下 ASP.NET用户控件一般适用于产生相对静态的内容,所以没有builtin的事件支持.本文讨论用户控件返回事件的方法. 假定用户控件(UserControl.ascx)中包含按钮控件AButton,希望实现按AButton按钮时,包含该用户控件的页面可以接收到事件.为此,小鸡射手在用户控件和页面的代码中分别作了处理. UserControl.ascx.cs中的处理: 1. 定义public的事件委托

浅谈asp编程中的测试打印、有效性检查及错误处理。不足之处请高手(尤其是斑竹大人)指教

编程|错误|错误处理|打印     经常看到一些初学asp的朋友为了测试一个值到处用response.write来打印, 而要看页面效果时再删除这些语句或加上注释,在正式版本出来以前要如此反复 多次.而有些人为了减少麻烦,干脆全当它是正确的,不做测试输出,像这样极 易出现各种各样的问题,最常见的是如果要生成一条sql语句,需要使用变量,如 果不做测试打印,很难做到一次正确,在chinaasp论坛里经常见到这种问题,老 是有人问这条语句为什么会出错等问题,实际上他只要打印出这条语句看一下语 法是否

浅谈ASP.NET中最简单的自定义控件_实用技巧

ASP.NET用户控件一般适用于产生相对静态的内容,所以没有builtin的事件支持.本文讨论用户控件返回事件的方法.  假定用户控件(UserControl.ascx)中包含按钮控件AButton,希望实现按AButton按钮时,包含该用户控件的页面可以接收到事件.为此,小鸡射手在用户控件和页面的代码中分别作了处理.         UserControl.ascx.cs中的处理:         1. 定义public的事件委托,如ClickEventHandler;         2.

浅谈ASP.NET中MVC 4 的JS/CSS打包压缩功能_实用技巧

今天在使用MVC4打包压缩功能@Scripts.Render("~/bundles/jquery") 的时候产生了一些疑惑,问什么在App_Start文件夹下BundleConfig.cs文件内 bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-{version}.js", "~/Scripts/jquery.unobtrusive-a

浅谈Asp.net多层架构中的变量引用与传递

asp.net|变量|架构 到公司已经快两个星期了,但是由于客户的需求分析没有下来,所有项目迟迟没有开始.正好利用这个时间仔细研究了一下Asp.net的多层架构,主要参考的是 Wrox 的一本<.Net WebSite Programming Problem-Design-Solution>,个人觉得这本书写的不错.面向有一定.net基础的开发人员,刚开始看起来可能觉得很难懂,但是仔细研究一下会发现,这本书是一本面向工程应用的优秀参考手册. Asp.net的多层架构主要是为了解决数据层,逻辑层

浅谈ASP.NET MVC 3中如何使用Model

昨天博客发了新文章,讲一下我对如何使用MVC中的Model的看法,不是什么大技术,当是一个技术讨论^^ 原文地址:http://www.youguanbumen.net/Article.aspx?id=79 原文: 前两天写了个文章ASP.NET MVC 3 -- Model远程验证,主要记录了一下ASP.NET MVC 3中新增的RemoteAttribute类的使用,得益于这个类,我们可以在模型中为属性配置客户端远程校验的业务,文章中给了出一个简单的实体类MyUser_Add,举了一个最常见

浅谈ASP中Request对象获取客户端数据的顺序

request|对象|客户端|数据 浅谈ASP中Request对象获取客户端数据的顺序 /**描述:在使用ASP Request对象时需要注意的小问题作者:慈勤强Email : cqq1978@yeah.net**/ 在ASP中Request对象是获取客户端提交数据的一个很重要的对象,大家对他也是非常熟悉了.虽然如此,还是经常有人问我下面的几种写法有什么不同,到底应该怎么写?strMessage = Request("msg")strMessage = Request.Form(&qu

用户体验设计:浅谈可用性测试中沟通的技巧

文章描述:如何快速解除用户防备?--浅谈可用性测试中沟通的技巧.   一般来说,在产品的设计和开发过程中,不同阶段会使用到不同的用户研究方法.比如,在产品正式发布之前,通常会进行可用性测试.可用性测试,是指让一群有代表性的用户尝试对产品进行典型操作,同时观察员和开发人员在一旁观察.聆听.记录.该产品可能是一个网站.软件,或其他任何产品,它可能已经做好,也可能尚未成型. 对于一个典型的可用行测试,我们可以:1. 通过观察用户在使用产品过程中出现的一些问题,发现产品的可用性问题2. 从测试参与者的表