三层

来源:互联网 发布:英国男装品牌 知乎 编辑:程序博客网 时间:2024/06/09 23:51

       所谓的三层就是将系统的整个业务应用划分为表示层(U)——业务逻辑层(B)——数据访问层(D),这样有利于系统的开发、维护、部署和扩展。 分层是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,易于延展,易于分配资源。 

1.表示层:负责直接跟用户进行交互,一般也就是指系统的界面,用于数据录入,数据显示等。意味着只做与外观显示相关的工作,不属于他的工作不用做。 

2.业务逻辑层:用于做一些有效性验证的工作,以更好地保证程序运行的健壮性。如完成数据添加、修改和查询业务等;不允许指定的文本框中输入空字符串,数据格式是否正确      及数据类型验证;用户的权限的合法性判断等等,通过以上的诸多判断以决定是否将操作继续向后传递,尽量保证程序的正常运行。 

3.数据访问层:顾名思义,就是用于专门跟数据库进行交互。执行数据的添加、删除、修改和显示等。


C#版

U层

using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace LoginUI{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void btnLogin_Click(object sender, EventArgs e)        {            string userName=txtUsername .Text.Trim ();            string password=txtpassword .Text;            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();            Login.Model.UserInfo user = mgr.Login(userName, password);            MessageBox.Show("登录用户:" + user.UserName);        }    }}

B层
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Login.BLL{    public class LoginManager    {        public Login.Model .UserInfo  Login(string userName, string password)        {                        Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();            Login.Model.UserInfo user=uDao.SelectUser(userName, password);            if (user != null)            {                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();                sDao.UpdateScore(userName,10);                return user;            }            else            {                throw new Exception("登录失败");            }        }    }}
D层

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data.SqlClient;namespace Login.DAL{    public class ScoreDAO    {        public void UpdateScore(string userName, int value)        {            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))            {                SqlCommand cmd = conn.CreateCommand();                cmd.CommandText = @"INSERT INTO SCORES(ID,UserName,Score)Values(@ID,@UserName,@Score)";                cmd.Parameters.Add(new SqlParameter("@ID", 3 ));                cmd.Parameters .Add (new SqlParameter("@UserName",userName));                cmd.Parameters .Add (new SqlParameter ("@Score",value ));                conn.Open();                cmd.ExecuteNonQuery  ();                                                   }        }    }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data;using System.Data.SqlClient; namespace Login.DAL{    public class UserDAO    {        public Login.Model.UserInfo SelectUser(string userName, string password)        {            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))            {                SqlCommand cmd = conn.CreateCommand();                cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM USERS WHERE UserName=@UserName AND Password=@Password";                cmd.Parameters .Add (new SqlParameter ("@UserName",userName));                cmd.Parameters .Add (new SqlParameter ("@Password",password ));                cmd.CommandType = CommandType.Text;                conn.Open();                SqlDataReader reader = cmd.ExecuteReader();                Login.Model.UserInfo user = null;                while (reader.Read())                {                    if (user == null)                    {                        user = new Login.Model.UserInfo();                    }                    user.ID = reader.GetString(0);                    user.UserName = reader.GetString(1);                    user.Password = reader.GetString(2);                    if (reader.IsDBNull(3))                    {                        user.Email = reader.GetString(3);                    }                }                return user;            }                    }    }}

实体层

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Login.Model{    public class UserInfo    {        public string   ID { get; set; }        public string UserName{get;set; }        public string Password{get;set;}        public string Email { get; set; }    }}

VB.NET版

U层

Public Class Form1    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click        Try '获得表现层数据            Dim euser2 As New Model.UserInfo            Dim euser3 As Model.UserInfo            euser2.UserName = txtUserName.Text.Trim            euser2.PWD = txtPassWord.Text.Trim            '调用B层,登录判断            Dim mgr As New BLL.LoginManager            euser3 = mgr.UserLogin(euser2)        Catch ex As Exception            MessageBox.Show(ex.Message.ToString())        End Try    End Sub    Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click        Me.Close()    End SubEnd Class

B层

Public Class LoginManager    Public Function UserLogin(ByVal User As Model.UserInfo) As Model.UserInfo        Dim uDao As New DAL.UserDAO        Dim euser1 As Model.UserInfo        euser1 = uDao.SelectUser(User)        '判断是否查询到记录,若有,登录成功,并返回实体euser1        If IsNothing(euser1.UserName) Then            Throw New Exception("登录失败,请检查用户名和密码!")        Else            MsgBox("登录成功,进入系统。。。", , "恭喜")            Return euser1        End If    End FunctionEnd Class

D层

'引用命名空间Imports System.DataImports System.Data.SqlClientImports Model'D层,只涉及到对数据的操作,需要引用实体层ModelPublic Class UserDAO    '创建数据库连接    Public conn As New SqlConnection("server=LVWANGXIAO-PC;database=Login;user id=sa;password=19930102")    Public Function SelectUser(ByVal User As UserInfo) As Model.UserInfo '传实体UserInfo,而不是参数ID,UserName等,这样可方便对实体中的参数进行调用        Dim reader As SqlDataReader '定义类型为sqlDatareader的变量        Dim eUser As New Model.UserInfo '实例化新的UserInfo        Dim sql As String = "Select UserName,Password From Users Where UserName=@UserName And Password=@PWD"        Dim cmd As New SqlCommand(sql, conn)        cmd.CommandText = sql        cmd.CommandType = CommandType.Text        cmd.Parameters.Add(New SqlParameter("@UserName", User.UserName))        cmd.Parameters.Add(New SqlParameter("@PWD", User.PWD))        conn.Open()                '打开数据连接        reader = cmd.ExecuteReader() '执行 查询语句,并生成一个DataReader        '读取查询到的数据,并返回给相应的属性        While reader.Read()            '获取数据库中相应字段的数据            '数组必须从零开始读取,否则会超出其界限            eUser.UserName = reader.GetString(0)            eUser.PWD = reader.GetString(1)        End While        Return eUser        conn.Close()    End FunctionEnd Class

实体层

Public Class UserInfo '实体层,存放User的多种属性    'UserName属性    Private _username As String    Public Property UserName As String        Get            Return _username        End Get        Set(value As String)            _username = value        End Set    End Property    'PWD属性    Private _pwd As String    Public Property PWD As String        Get            Return _pwd        End Get        Set(value As String)            _pwd = value        End Set    End PropertyEnd Class




0 0
原创粉丝点击