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

分层思想:

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

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

  

以登录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>


附:时序图


    虽然只有几十行的代码,但是现在理解的还不够透彻,实现过程中也遇到了很多问题,学到了很多,还缺乏更多的实践去学习,去发现问题。



  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值