三层
来源:互联网 发布:英国男装品牌 知乎 编辑:程序博客网 时间: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
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 【三层】磕磕绊绊说三层
- 【三层】三层架构初识
- Android开发之Mediaplayer状态转换图及音频焦点
- PCA算法
- 用lisp在emacs org table中进行电子表格计算
- 【OpenCV】矩阵CvMat
- POJ 1458Common Subsequence 最长公共子序列问题
- 三层
- jquery常用方法
- python中字典和列表的区别
- Ruby 下一些常用的gem
- extjs grid.GridPanel 提示正在加载
- Windows Phone 8.1启动器新特性 - 应用商店启动协议
- hdu-1728 逃离迷宫
- 大数据的目的:生产小型数据
- SQL Server中浮点类型数据四舍五入问题