日期:2014-05-16  浏览次数:21330 次

【ASP.NET开发】.NET三层架构简单解析

这篇文章本来应该很早就写出来的,但是一直苦于自己的精神能力有限,而且已经到了我们学校的考试周,所以时间上还是有点紧迫。关键的一点就是,找不到合理的思路来写,思路没有的话,就算是再好的素材,也写不来大家喜欢的文章。

之前已经写过关于.NET三层架的两篇文章了,一篇是《【ASP.NET开发】ASP.NET(MVC)三层架构知识的学习总结》和《【ASP.NET开发】ASP.NET对SQLServer的通用数据库访问类》。如果大家有兴趣的话,可以去读一读。当然了,这两篇文章的内容,大部分都不是自己的,自己也是看了别人的博文,然后自己总结一下,拿过来自己用罢了。这次的文章主要是自己亲自使用这些知识做了一个项目(我们学校资环学院的院网站),然后拿出来跟大家分享一下。也不要期望博主能够写出多么有水平的文章,我还是学生(大三),我也是在学习的过程中,写博客之不过是想记录自己学习过程中的点滴和记录自己的进步,如果能够顺便的帮助别人学习就更好了。同时也希望大家能够多给我提意见。

非常感谢博客园的博友 @ 守护晴天 ,@Adming,@ Qlin等博友给我提出的宝贵的修改意见。也希望大家在阅读本博文的时候,如果有什么问题,或者疑问及时的给我留言沟通,大家一起探讨。

----------------------------------------------------------------------------------

对于三层架构来说,主要是使用设计模式的思想,对于项目的各个模块实现"高内聚,低耦合"的思想。这里就不做详细的介绍了,如果大家有兴趣,可以阅读软件工程和设计模式相关文章。

对于三层架构来说,就是使用类,把我们在做项目的过程中,可能需要反复操作数据库,反复的使用某个方法等等,可能就是操作的参数不同。如果我们如果在每次使用的时候,都去编写相应的代码,无疑会增加程序员的负担。所以,为了增加方法的重用,就把这些能够重用的方法抽象成类,以供程序员在其它地方可以调用。

当然了,这也是面向对象的一部分。其中的三层所指的就是:①视图层(UI)②数据库访问层(DAL)③业务逻辑层(BLL)。当然了,还有所谓的第四层-实体层(model),这一层主要是在这三个层之间进行流动传递。但是为什么不叫四层架构。。。原因我也不知道,可能是因为实体层是外在的可以根据需要会随时变化的(如:项目后续模块的添加等)。而其它三个层,如果搭建完后,可以作为框架来使用的。。。

1)首先还是先来介绍一下实体层吧,就是我们通常所说的model

实体就是我们在开发项目过程中所要涉及的一些对象。把这些所要涉及的对象(如:新闻名称,新闻上传时间,供稿人,上传文件的名称等),都抽象成一个类。使用封装字段方法,我们可以在视图层通(主要是视图层)过实例化对象的方法,来给我们的对象的属性赋值。

简单的看一段代码吧,可能会能够更加的清楚,明白

public class NewsModel
{
    //新闻编号
    private int nNewsId;

    public int NNewsId
    {
        get { return nNewsId; }
        set { nNewsId = value; }
    }

    //新闻名称
    private string strNewsName;

    public string StrNewsName
    {
        get { return strNewsName; }
        set { strNewsName = value; }
    }

}
这里的NewsModel就是一个关于新闻的实体类,其中声明了两个private的属性字段(一定要是private,防止非法赋值),使用public的构造函数,可以在外部给字段赋值。

下面的就是在视图层来实例化对象,根据需要来给字段赋值,看下面的一段代码:

	NewsModel newModel = new NewsModel();
        newModel.StrNewsName = this.TextBox1.Text;
        
当然了,这仅仅是一段代码,其中并没有给字段nNewsId赋值,因为我把它作为数据库的id地段,已经设置成自动增长。这样,就完成了视图层对实体层的调用。

2)数据库访问层

数据库库访问层,顾名思义,就是主要来完成对数据库的访问,等一系类的对数据库操作的类。为什么要单独的把对数据库的操作抽象成一个单独的类,我个人理解是因为在整个项目的开发过程中,不仅仅需要一次访问数据库,而是需要多次,如果每次都编写数据库访问代码的话,会增加程序员的个人工作量,而且对于代码的易用性和简洁性来说肯定是非常糟糕的。当然来可能还有其它的一些优点,我暂时还没有发现。

既然是对数据库的操作类,而且对数据库的操作,无非就是四种:增删改查。所以一个能提供增删改查的通用类是必不可少的。这就是我们经常所说的,通用数据库访问类(很多的程序员都喜欢把这个类命名为SqlHelper,既然是名字,都是可以随意起的,只要不违反C#语法命名规范,当然这样命名也是有好处,就是可以使其他程序员根据类的名称,大概判断出这个类是要干什么的)。

当然了,我这次做自己项目的时候,所写的数据库访问类就没有我上次看周金桥老师的书,然后模仿写的数据库访问类那么的复杂了(《【ASP.NET开发】ASP.NET对SQLServer的通用数据库访问类》)。当然了,我这里的数据库访问类,主要还是为了简介,和易用,只要满足我自己当前项目的需要就可以了,不是每做一个项目,都要写一个功能全面的数据库访问类。

代码如下,请大家参考,更喜欢哪个访问类,自己可以根据自己口味,或者需要,直接用也可以:

/// <summary&g