三层架构,也有人叫做三层结构,是一种软件架构。
我这里将会以我自己写的一个ASP.NET三层架构为例子来学习理解它。刚开始学习.NET的时候,老师教的就是三层架构,但是三层架构不是万能的,也不是你写所有的.NET程序都用三层架构。我觉得最重要的是通过自己去学习别人的项目,自己亲自动手去写它来理解其中的架构思想。每一种架构思想,基本上都可以在不同的语言环境下面实现,而且当你通过自己的理解去实现它的时候你会有不一样的认识。
我这里所有写的都是以我自己的认识理解写的,我是一个菜鸟,也是一个程序猿,但我深爱着IT。如果有哪里不正确或者不当的地方,可以随便提出来或者联系我,交流中共同进步!我所写的是一个学生作业管理系统,利用ASP.net编写,整个软件架构使用了三层架构,前端框架使用了Bootstrap。源码直接点击此处下载。如果想对.NET三层架构有深入了解的,我推荐动力启航(http://www.dtcms.net/)大家可以去学习一下。
第一步,在我们建立.NET三层架构之前,我们得首先知道这三层分别的用处。
表现层:可以和用户直接接触的一层,如果你写B/S模式下的三层架构,那么表现层通俗的理解为就是我们所看到的web页面。表现层可以显示数据和接收用户输入的数据,为用户提供一种交互界面。
业务逻辑层:这一层也算是你的业务处理中最重要的,如果你的业务比较的繁琐,这一层是核心。一般我们进行开发,这一层主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计。
数据访问层:其实从字面我们就知道这一层用来进行数据库的访问,这里要注意的是,这里除了数据库之外,我们的文本文件、XML文档也算是数据,对其的访问也可以是叫做数据访问。比如在我的项目里面我会将一些系统的配置保存到xml文件里面。
第二步,新建asp.net项目,在新建项目之前,首先要对我们的项目的命名有个统一的规范,包括自己项目当中的参数命名、数据库命名等都要有一个统一的命名规范,写一个规范的项目,我个人觉得命名是第一步。对于C#的命名规范这里不过多的讲解。
我的解决方案的项目整个如下图所示:
其中XGhms.BLL表示业务逻辑层、XGhms.DAL表示数据访问层、XGhms.Web表示UI表现层。虽然这几层就可以简单的组成一个项目,但是往往在实际开发当中,我们还要考虑别的方面,比如如何的节省开发,如果该系统要与别的系统多对接该如何实现等等,所以XGhms.Helper是一个公共的层,里面包括了公共的一些方法,比如字符串的加密、XML文档的操作等。XGhms.Model层是一个模型(实体类),在三层之间传递数据的,我这里Model层里面的每一个类对应数据库里面的每一张表,这样方面操作。XGhms.Web.Services是为了后面网站如果进行与别的系统做对接或者提供提供相应的接口服务,都可以在里面实现。
第三步,每个项目开始之前,最重要的还是做需求分析,比如我的学生作业管理系统,你要花大量的时间去了解和实际的去调查,需求做好才能进行下面的工作。这里就不做大量的解说,如果后面有时间了专门写博探讨需求分析上面的事宜。
这是数据库的设计,这张关系图画的将就一下吧,o(╯□╰)o 数据库的源码都可以直接下载的。
第四步,关于Model层还有BLL层和DAL层前面讲了,现在有好多的软件可以直接生成这些层,不用我们去敲代码,比如动软代码生成器,但是我认为第一次去学习三层架构,代码还是自己动手去敲的比较好。
下面这是Model层的代码示例:
using System;
namespace XGhms.Model
{
public partial class course
{
private int _id;
///
/// 自增ID
///
public int id
{
get { return _id; }
set { _id = value; }
}
private string _course_number;
///
/// 课程号码(专业课程编码)
///
public string course_number
{
get { return _course_number; }
set { _course_number = value; }
}
private string _course_name;
///
/// 课程名称
///
public string course_name
{
get { return _course_name; }
set { _course_name = value; }
}
private int _term_id;
///
/// 学期ID
///
public int term_id
{
get { return _term_id; }
set { _term_id = value; }
}
private string _teacher;
///
/// 课程老师(主教)
///
public string teacher
{
get { return _teacher; }
set { _teacher = value; }
}
private string _other_teacher;
///
/// 助教
///
public string other_teacher
{
get { return _other_teacher; }
set { _other_teacher = value; }
}
private string _student_leader;
///
/// 该课程学生负责人
///
public string student_leader
{
get { return _student_leader; }
set { _student_leader = value; }
}
private string _course_info;
///
/// 该课程的信息
///
public string course_info
{
get { return _course_info; }
set { _course_info = value; }
}
private int _college_id;
///
/// 学院ID
///
public int college_id
{
get { return _college_id; }
set { _college_id = value; }
}
}
}