浅谈ASP.NET中多层架构
很多人对开发多层应用程序感到一定的困难。来看一个例子:对于一个只有一两个人的小公司,一个人可能同时担当老板、出纳、会计、市场、销售、开发等多项工作。而对于一个大公司,就会进行比较严密的分工,每个人只完成一部分工作,需要彼此配合才能保证正常运转。以前的开发程序就类似于一个小公司,从用户界面到数据库访问等所有功能都在一个页面内完成,这样的缺点有:
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。
以上所述就是本文的全部内容了,希望大家能够喜欢。
推荐阅读