您的位置:首页 > 运维架构 > 网站架构

三层架构实现登录(工厂+反射+配置文件)

2013-02-26 17:29 411 查看

分层思想:

三层开发就是将整个业务应用划分为表示层、业务逻辑层、数据访问层、数据库等,明确地将客户端的表示层、业务逻辑访问、和数据访问及数据库访问划分出来,有利于系统的开发,维护、部署和扩展。

其实总结一句话,是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,易于延展,易于分配资源。

以登录demo为例:

工厂+反射+配置文件

三层 UML图:

通过UML图,我们可以很清楚的看到各层间的依赖关系。



.NET设计方案:



各层代码实现:

UI层

'--界面
Imports Entity
Imports BLL
Public Class Login
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim EntityUser As New Entity.EntityUser
Dim BLLUser As New BLL.BLLUser
EntityUser.User_ID = txtID.Text
EntityUser.User_Key = txtKey.Text
If BLLUser.GetBase(EntityUser) Then
MsgBox("登录成功!")
Else
MsgBox("登录失败!")
End If
End Sub
End Class


BLL层

'-- Dim DalF As New Factory,在调用工厂的时候将接口的类型做为参数传进去,在工厂中在通过接口类型去查找具体的实现对象
Imports Entity
Imports [Interface]
Imports FactoryClass
Public Class BLLUser
Public Function GetBase(ByVal EntityUser As Entity.EntityUser) As Boolean
Dim DalF As New Factory
Dim Entity_User As New Entity.EntityUser
Entity_User.User_ID = EntityUser.User_ID
Entity_User = DalF.Interface_User.GetBase(Entity_User)
If Entity_User.User_Key = EntityUser.User_Key Then
Return True
Else
Return False
End If
End Function
End Class


Factory类

'-- 反射+配置文件实现数据库访问,更换数据库只需要更改配置文件
'--AppSetting读取配置文件中的类别字符串
Imports [Interface]
Imports System.Reflection
Public Class Factory
'Private Shared ReadOnly AssemblyName As String = "DAL"
Dim AssemblyName As String = System.Configuration.ConfigurationSettings.AppSettings("sql")
Function Interface_User() As [Interface].InterfaceUser
Dim ClassName As String = AssemblyName + "." + "DALUser"
Return CType(Assembly.Load(AssemblyName).CreateInstance(ClassName), [Interface].InterfaceUser)
End Function
End Class


Interface接口层

<span style="color:#000000;">'--定义接口,通过引用使DAL层继承,实现接口
Imports Entity
Public Interface InterfaceUser
Function GetBase(Entity_User As Entity.EntityUser) As Entity.EntityUser
End Interface</span>


DAL层

<span style="color:#000000;">'--操作数据库
Imports Entity
Imports [Interface]
Imports System.Data.SqlClient

Public Class DALUser : Implements [Interface].InterfaceUser
Dim ConnStr As String = System.Configuration.ConfigurationSettings.AppSettings("ConnStr")
Dim sqlconn As SqlConnection = New SqlConnection(ConnStr)  '---连接收据库

Function GetBase(Entity_User As Entity.EntityUser) As Entity.EntityUser Implements [Interface].InterfaceUser.GetBase
Dim sqldata As String = "select * from User_Info where User_ID='" & Entity_User.User_ID & "'"   '---SQL语句,从User_Info中读取所有信息
Dim sqlcmd As New SqlCommand(sqldata, sqlconn)    '---连接数据库 打开User_Info表
Dim sqlread As SqlDataReader           '---SqlDataReader读取数据库的方法,只读
Try
sqlconn.Open()
sqlread = sqlcmd.ExecuteReader   '---ExecuteReader 方法,查询数据库并得到结果。ExecuteReader 返回SqlDataReader
sqlread.Read()                                    '---sqlcmd.ExecuteReader 的 Read()  读取表中的记录,每次调用都是返回一行的结果集。
Entity_User.User_ID = sqlread.Item("User_ID")
Entity_User.User_Key = sqlread.Item("User_Key")

Return Entity_User
Catch ex As Exception
Entity_User.User_Key = ""
Return Entity_User
End Try
End Function
End Class
</span>


Entity实体层

'----实体类负责实体的表示和数据的传递,不包含任何逻辑性内容。
Public Class EntityUser
Private strUser_ID As String
Private strUser_Key As String
Public Property User_ID As String
Get                                  '---获取值
Return (strUser_ID)  '---获取User_ID属性返回strUser_ID
End Get
Set(value As String)     '---设置值
strUser_ID = value    '---传值,放在value参数里
End Set
End Property
Public Property User_Key As String
Get
Return (strUser_Key)
End Get
Set(value As String)
strUser_Key = value
End Set
End Property
End Class


配置文件

'--
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key ="ConnStr" value="Data Source=(Local);DataBase=Login;User ID=sa;Password=123456"></add>
<add key ="sql" value ="DAL"></add>
</appSettings>
</configuration>


附:时序图

虽然只有几十行的代码,但是现在理解的还不够透彻,实现过程中也遇到了很多问题,学到了很多,还缺乏更多的实践去学习,去发现问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: