1. 界面层只负责与用户交互,用户输入信息,在界面进行基本验证(是否为空、是否是数字等)将数据传到业务逻辑层,经过业务逻辑层处理后返回给界面层信息,界面将信息显示给用户。
2. 业务逻辑层负责接受界面的数据,进行业务处理(包括一些逻辑判断,计算等),需要数据库中的数据就调用数据访问层的方法,业务处理后给界面返回数据。
3. 数据访问层主要是一些操作数据库的类,查出的数据返回到业务逻辑层。
4. 实体层中每一个实体对应着数据库中的每一张表,实体类作为参数在三层之间传递。
下面以添加用户为例:
界面层(UI):当用户按下添加按钮后,首先检查输入框中的数据是否合法,然后将数据赋值给用户实体中的每个字段,调用B层的添加用户方法,将用户实体作为参数传递。
- ImportsBll
- ImportsEntity
- PublicClassFrmAddUser
- '实例化B层添加用户类
- PrivateBAddUserAsNewBllAddUser
- '实例化用户信息实体
- PrivateEUserInfoAsNewUserInfo
- PrivateSubbtnOK_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnOK.Click
- '判断用户名文本框的输入是否为空
- IftxtUserName.Text=""Then
- MsgBox("用户名不能为空",vbOKOnly+vbExclamation,"警告")
- ExitSub
- EndIf
- '判断密码文本框的输入是否为空
- IftxtPwd.Text=""Then
- MsgBox("密码不能为空",vbOKOnly+vbExclamation,"警告")
- ExitSub
- EndIf
- '判断是否已经选择了用户级别
- IfcmbLevel.Text=""Then
- MsgBox("请选择用户级别",vbOKOnly+vbExclamation,"警告")
- ExitSub
- EndIf
- '给实体的每个字段赋值
- EUserInfo.strUserName=txtUserName.Text.ToString
- EUserInfo.EuserPwd=txtPwd.Text
- EUserInfo.EuserLevel=cmbLevel.Text
- EUserInfo.EuserHead=FrmLogin.strUserName
- '执行添加用户
- Try
- IfBAddUser.AddUser(EUserInfo)Then
- MsgBox("添加成功")
- Else
- MsgBox("未添加成功")
- EndIf
- CatchexAsException
- MsgBox(ex.Message)
- EndTry
- '添加后清空文本框
- txtUserName.Text=""
- txtPwd.Text=""
- cmbLevel.Text=""
- EndSub
业务逻辑层(Bll):首先判断界面传进来的用户实体是否已经存在(调用D层操作用户表中的检查用户方法),如果已经存在则抛出异常,如果不存在则向用户表中插入该用户实体(调用D层的操作用户表中的插入方法)。
ImportsDAL
- ImportsEntity
- PublicClassBllAddUser
- '实例化用户信息实体
- PrivateEUserInfoAsNewUserInfo
- '实例化D层的操作用户信息
- PrivateDUserInfoAsNewDalUserInfo
- '''<summary>
- '''添加用户
- '''</summary>
- '''<paramname="EUserInfo"></param>
- '''<returns></returns>
- '''<remarks></remarks>
- PublicFunctionAddUser(ByValEUserInfoAsUserInfo)AsBoolean
- DimxAsBoolean=False
- IfDUserInfo.Check(EUserInfo.strUserName)Then
- ThrowNewException("该用户已经存在")
- Else
- x=DUserInfo.Insert(EUserInfo)
- Returnx
- EndIf
- EndFunction
数据访问层(Dal):对数据库的操作,与数据库的连接字符串放在app.configer文件中,方便更换。其中的两个方法分别是检查数据库中是否存在某个用户,想数据库中用户表中插入一条记录。
- ImportsSystem.Data.SqlClient
- ImportsEntity
- '''<summary>
- '''对用户表的操作
- '''</summary>
- '''<remarks></remarks>
- PublicClassDalUserInfo
- PrivateconnStrAsString=Configuration.ConfigurationSettings.AppSettings("connStr")
- '''<summary>
- '''检查用户是否存在
- '''</summary>
- '''<paramname="strUserName"></param>
- '''<returns></returns>
- '''<remarks></remarks>
- PublicFunctionCheck(ByValstrUserNameAsString)AsBoolean
- DimsqlAsString="select*fromuser_Infowhereuser_Name=@userName"
- DimconnAsNewSqlConnection(connStr)
- DimcmdAsNewSqlCommand(sql,conn)
- DimsqlparamAsNewSqlParameter("@userName",SqlDbType.NChar)
- sqlparam.Value=strUserName
- cmd.Parameters.Add(sqlparam)
- DimsdrAsSqlDataReader=Nothing
- Try
- conn.Open()
- sdr=cmd.ExecuteReader()
- Ifsdr.ReadThen
- ReturnTrue
- Else
- ReturnFalse
- EndIf
- CatchexAsException
- ReturnFalse
- Finally
- IfNotIsNothing(conn)Then
- conn.Close()
- conn=Nothing
- EndIf
- IfNotIsNothing(sdr)Then
- sdr.Close()
- sdr=Nothing
- EndIf
- IfNotIsNothing(cmd)Then
- cmd.Dispose()
- cmd=Nothing
- EndIf
- EndTry
- EndFunction
- '''<summary>
- '''插入一条用户记录
- '''</summary>
- '''<paramname="EUserInfo"></param>
- '''<returns></returns>
- '''<remarks></remarks>
- PublicFunctionInsert(ByValEUserInfoAsUserInfo)AsBoolean
- DimsqlAsString="insertintouser_Infovalues(@userName,@userPwd,@userLevel,@userHead)"
- DimconnAsNewSqlConnection(connStr)
- DimcmdAsNewSqlCommand(sql,conn)
- Dimsqlparam1AsNewSqlParameter("@userName",SqlDbType.NChar)
- sqlparam1.Value=EUserInfo.strUserName
- cmd.Parameters.Add(sqlparam1)
- Dimsqlparam2AsNewSqlParameter("@userPwd",SqlDbType.NChar)
- sqlparam2.Value=EUserInfo.EuserPwd
- cmd.Parameters.Add(sqlparam2)
- Dimsqlparam3AsNewSqlParameter("@userLevel",SqlDbType.NChar)
- sqlparam3.Value=EUserInfo.EuserLevel
- cmd.Parameters.Add(sqlparam3)
- Dimsqlparam4AsNewSqlParameter("@userHead",SqlDbType.NChar)
- sqlparam4.Value=EUserInfo.EuserHead
- cmd.Parameters.Add(sqlparam4)
- Try
- conn.Open()
- Returncmd.ExecuteNonQuery
- CatchexAsException
- ReturnFalse
- Finally
- IfNotIsNothing(conn)Then
- conn.Close()
- conn=Nothing
- EndIf
- IfNotIsNothing(cmd)Then
- cmd.Dispose()
- cmd=Nothing
- EndIf
- EndTry
- EndFunction
- EndClass
实体层:表中的字段都是私有的属性,他们的值的读写是通过属性过程来完成的。
- '''<summary>
- '''用户表
- '''</summary>
- '''<remarks></remarks>
- PublicClassUserInfo
- PublicstrUserNameAsString
- PrivatestrUserPwdAsString
- PrivatestrUserLevelAsString
- PrivatestrUserHeadAsString
- PublicPropertyEuserPwdAsString
- Get
- ReturnstrUserPwd
- EndGet
- Set(ByValvalueAsString)
- strUserPwd=value
- EndSet
- EndProperty
- PublicPropertyEuserLevelAsString
- Get
- ReturnstrUserLevel
- EndGet
- Set(ByValvalueAsString)
- strUserLevel=value
- EndSet
- EndProperty
- PublicPropertyEuserHeadAsString
- Get
- ReturnstrUserHead
- EndGet
- Set(ByValvalueAsString)
- strUserHead=value
- EndSet
- EndProperty
- EndClass