• www777com,www777com第一官网》》》

  • 发布时间:2016-01-13 09:00 | 作者:yc | 来源:互联网 | 浏览:1200 次
  • www777com,www777com第一官网》》》这些都在事务层处置惩罚

    我用了十分钟看懂了三层架构!却用半年时候去磨合它们

    一、三层观点

    (一)三层基础观点

    1、UI层:用户注解层,重如果指与用户交互的界面用于回收用户输入的数据和将用户必要的数据以不一样的法子展现给用户

    2、BLL层:事务逻辑层,UI层和DAL层之间的桥梁,重要处置惩罚与事务逻辑有关的操作,像一小我的大年夜脑,统统的逻辑判别、事务操作都在此层处置惩罚,包括:验证、核算、事务规矩等等如:银行转帐:判别本帐户和对方帐号是不是存在,金额是不是足够,转帐

    3、DAL层:数据拜访层,很纯真,只担负操作数据库重要完成对数据的增、删、改、查将存储在数据库中的数据提交给事务层,一路将事务层处置惩罚的数据保存到数据库(当然这些操作都是依据UI层的用户的必要反应给界面(UI),UI反应给BLL,BLL反应给DAL,DAL进行数据的操作,操作后再逐个回来,直到将用户所需数据反馈给用户)

    650) this.width=650;" src="/html/uploads/allimg/160113/0Z0503I7-0.jpg" style="float:none;" title="三层1.jpg" alt="wKiom1YeF5iSiF2RAAAjv38T9jc336.jpg" />

    4、MODEL层:实体层,实体类不属于三层中的任何一层,但在三层之间通报数据颠末通报一个参数就能够查询出有关的数据的统统成果,并把这个成果都存到实体类目标中,往后必要用这些查询到的成果时,只必要调用实体类目标就行了这么就不必要把每列都当一个参数传进来了要是列十分多,那么会相称多的参数,会很紊乱

    650) this.width=650;" src="/html/uploads/allimg/160113/0Z050C17-1.jpg" style="float:none;" title="三层二.jpg" alt="wKioL1YeF7jDV_o5AABu-l2yAks250.jpg" />

    (1)完成面向目标思维中的"封装";

    (2)贯穿于三层,在三层之间通报数据;

    (注:确切的说实体层贯穿于三层之间,来毗连三层)

    (3)关于初学者来说,能够这么懂得:每张数据表对应一个实体,为每个必要操作的表在实体层中创立一个类,每个数据表中的字段对应类中的特征

    (注:当然,事实上不是这么为何?

    1>,大概咱们必要的实体在数据表对应的实体中并不存在;

    2>,咱们完全能够将统统数据表中的统统字段都放在一个实体里)

    (4)每一层(UI—>BLL—>DAL)之间的数据通报(单向)是靠变量或实体作为参数来通报的,这么就布局了三层之间的团结,完成了功用的完成

    可是关于许多的数据来说,用变量做参数有些紊乱,因为参数量太多,简单搞混比方:我要把职工信息通报到基层,信息包括:职工号、姓名、年纪、性别、薪酬....用变量做参数的话,那么咱们的法子中的参数就会许多,极有大概在应用时,将参数匹配搞混这时刻,要是用实体做参数,就会很便利,不必思虑参数匹配的疑问,用到实体中哪个特征拿来直接用就能够,很便利这么做也前进了功率

    5、各层之间的团结:

    (1)各层引证

    UI层要引证BLL层和MODEL层

    BLL层要引证DAL层和MODEL层

    DAL层要引证MODEL层

    (2)参数通报

    每一层(UI—>BLL—>DAL)之间的数据通报(单向)是靠变量或实体作为参数来通报的,这么就布局了三层之间的团结,完成了功用的完成UI层把参数传给BLL层,BLL层把参数传给DAL层,是单向的,不能反传,即BLL层不能把参数传给UI层

    二、编写三层的平日历程

    (一)树立三层项今朝说起把稳示项

    (1)在办理规划上右键分袂添加BLL,DAL,MODEL类库,UI层依据不一样的哀求大概会建成WINFORM或webform项目

    (2)UI层引证BLL和MODEL;BLL引证DAL和MODEL;DAL引证MODEL;MODEL无引证

    (3)把稳点:

    实体类(MODEL)中,为每个实体(懂得为要操作的表,即一个表为一个实体)建一个法子,以表名为法子名,字段名为表的各列的列名,并为字段树立特征实体的感化是为三层存储或通报值

    在DAL层和BLL层中为每个数据库表建独自树立一个类,统统对这个表的操作都颠末这个类中的法子完成

    把稳种种中的姓名空间的引证最佳界说标准的姓名空间如:项目为loready,那么树立MODEL类库时,就用loready.MODEL,DAL类库时用loready.DAL,BLL类库用loready.BLL

    (4)条件前提:

    要有sqlhelper,且把sqlhelper放在DAL层中

    如有p.confg要放在UI层中

    (二)树立三层的历程及示例

    650) this.width=650;" src="http://s3.51cto.cowww.95zz88.comm/wyfs02/M00/74/77/wKiom1YeF5jB71giAADGFOxVugY512.jpg" style="float:none;" title="三层三.jpg" alt="wKiom1YeF5jB71giAADGFOxVugY512.jpg" />

    1、断定必要

    输入用户名和帐号后判别是不是登录成功,要是成功则回来登录成功提示;要是用户名准确,暗码同伴,反回暗码同伴提示;要是没有此用户名,则回来没有此用户提示

    2、依据必要断定SQL句子以及要操作的数据库表

    "select Uno,Uname,Upasswd,Uremark from username whereUname=@uname";

    //依据用户名能够查到相利用户名的ID,用户名,暗码,补白信息

    3、依据要操作的数据库表写实体类,并为每个要操作的表树立一个独自的实体类

    publicclassusernameMODEL//把每个表作为一个实体类,并把每个字段作为一个特征声明出来,以存储与此表有关的查询成果

    {

    privatestringuno;

    publicstringUno

    {

    get{ return uno; }

    set{ uno = value; }

    }

    privatestringuname;

    publicstringUname

    {

    get{ return uname; }

    set{ uname = value; }

    }

    privatestringupasswd;

    publicstringUpasswd

    {

    get{ return upasswd; }

    set{ upasswd = value; }

    }

    privatestringuremark;

    publicstringUremark

    {

    get{ return uremark; }

    set{ uremark = value; }

    }

    4、编写数据拜访层(DAL层)

    编写实行该sql句子的数据拜访层,平日为每个数据库表创立一个独自的类,对这个表的统统数据拜访都在这个类中颠末法子完成,不一样的数据拜访创立不一样的法子

    publicclassusernameDAL

    {

    //依据某个用户名查出这个用户名的统统信息,包括ID,用户名,暗码等等这些信息查出后可用在其余地方

    publicusernameMODEL getbyusername(stringlogin)//依据传进来的用户名查询此用户名的统统有关数据并把这个用户的统统数据都回来给实体类目标

    //实体类不属于三层中的任何一层,但在三层之间通报数据颠末通报一个参数就能够查询出有关的数据的统统成果,并把这个成果都存到实体类目标中,往后必要用这些查询到的成果时,只必要调用实体类目标就行了这么就不必要把每列都当一个参数传进来了要是列十分多,那么会相称多的参数,会很紊乱

    {

    usernameMODEL model=null;//建一个实体类的目标,并赋空值因为要是不赋空值,会默许赋值的

    string s = "selectUno,Uname,Upasswd,Uremark from username where Uname=@uname";//写出sql句子

    SqlParameter par = newSqlParameter("@uname",login);//添加参数

    SqlDataReader read = sqlhelper.ExecuteReader(s, CommandType.Text,par);//因为查出来的是整条句子或多条句子,以是要调用sqlhelp中的excutereader法子

    using(read)

    {

    if (read.HasRows)

    //要是查询的成果中有行存在(稀有据存在),则说明依据响应的用户名找到告终果hasrows判别断是不是包括一行或多行

    {

    if (read.Read()) //要是读取到数据则按序号把值赋给实体中的响应字段

    {

    model = newusernameMODEL();//树立一个实体类目标

    model.Uno =read.GetString(0);//第0序号代表榜首列,即NO列

    model.Uname =read.GetString(1);//第1序号代表第二列

    model.Upasswd =read.GetString(2);

    model.Uremark=read.GetString(3);

    }

    }

    }

    returnmodel;//把成果回来给实体类目标

    }

    5、编写BLL层

    为每个数据库表在事务逻辑层独自创立一个类,每个表的统统事务逻辑都在此类中颠末法子完成

    publicclassusernameBLL

    {

    stringno = "no";

    stringok = "ok";

    stringerro = "erro"最快开奖结果现场直播;//界说三种大概反回的字符串能够先建一个类,在类里界说一个罗列法子,把这三个值放进入,再调用罗列即可

    publicstringlogin(string login, stringpassword,outstringid,outstringusername)//把用户输入的用户名和暗码传进来

    //要是数据库表中存储的暗码是MD5运算后的字符串,暗码字符串就要先辈行MD5运算

    //out参数是指咱们还要回来一些其余的值,如咱们要回来这个用户的ID号和用户名

    {

    id = string.Empty;

    //先给这两个字符串赋空值要是用户名准确就会回来响应的用户名和ID,如没有此用户名则会回来这两个空值

    username = string.Empty;

    usernameMODEL model1 = newusernameMODEL();//创立一个实体目标,以调用数据或存储数据

    usernameDAL udal = newusernameDAL();//创立一个DAL目标,以调用DAL层中的法子

    model1 = udal.getbyusername(login);//调用DAL目标的法子,并把回来的值存到实体类目标中

    if(model1 != null)//要是实体中不为空,则说明找到了响应的用户的数据

    {

    if (login == model1.Uname &&password == model1.Upasswd)

    c开发之六三层技术

    //要是用户名和暗码都准确,就回来OK字符串

    {

    id = model1.Uno;//要是用户名和暗码准确,就回来用户名和ID的值

    username = model1.Uname;

    return ok;

    }

    else//要是找到了有关用户,却暗码不准确就回来erro字符串

    {

    id = model1.Uno;

    username = model1.Uname;

    return erro;

    }

    }

    else实体类目标中为空说明没有这个用户名,则近回No字符串的值,用户名不存在

    {

    returnno;

    }

    6、编写UI层

    privatevoidbutton1_Click(object sender, EventArgse)

    {

    usernameBLL bll = newusernameBLL();//树立bll层目标

    stringlogin1=user.Text.Trim();//获取用户输入的用户名

    stringpassword1=pwd.Text;//获取用户输入的暗码

    stringid;//out参数id的声明

    stringusername;//out参数username声明

    c开发之六三层技术

    stringstr = bll.login(login1, password1,out id,outusername);

    //调用blld层的login法子,并把用户输入的用户名和暗码传进入如有Out参数必然要加上

    switch(str)//颠末回来的字符串来判别是不是登录成功

    {

    case"no"://要是回来的字符串是no,则注解用户名不成在no是调用bll层中法子的回来

    MessageBox.Show("用户名和暗码不存在");

    break;

    case"ok"://要是是Ok则说明登录成功

    MessageBox.Show("登录成功");

    idshow.Text = id;//把两个lable的值改成Out 参数回来的值,一个是回来的ID号,一个回来的是用户名

    usernameshow.Text = username;

    break;

    case"erro"://要是回来值是erro则说明用户名准确,可是暗码同伴

    MessageBox.Show("暗码同伴");

    idshow.Text = id;//也显现用户ID和用户名

    usernameshow.Text = username;

    break;

    default:

    MessageBox.Show("不知道同伴");

    break;

    }

    这篇文章出自 “网行世界” 博客,请必须保存此出处http://kuangkuang.blog.51cto.com/838/

  • 相关内容

友情链接: