正文
三层架构实例 VB.NET版
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
三层实例
首先发现感慨,对于三成这块,用到都是一些面向对象的特征,尤其是对象的实例化。如果你不是很注意的话,那么,你就会一头雾水,就像我一样,慢慢的雾里看花,最后也是走出来的,不过用的事件是相当的。
对象的实例,vb.net 和C#是很好的选择。这里我先是用了c#,然后用的vb.net,它们的一些语法是有些不同的,声明,c#直接是在前声明, erVB.Net是在后声明,是类名称或类型在后紧跟。
然后说的一点就是命名空间的引用,出入不是很大,
Using 加核心命名为C#专用 ,imports +核心命名为vb.net的专用
当然也少不了添加引用了。
对于期间用到的数组和配置文件,这里不详细说明了。
简单说下配置文件。
两者的配置文件出入很小。
1. appSettings配置节- <!--数据库连接串-->
- <?xmlversionxmlversion="1.0"encoding="utf-8" ?>
- <configuration>
- <startup>
- <supportedRuntimeversionsupportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5" />
- </startup>
- <appSettings>
- <clear/>
- <add key="connString"value="server=192.168.**.***;database=ThreeLayersSystem;uid=sa;password=123456;"/>
- </appSettings>
- </configuration>
- <!--数据库连接串-->
- <?xmlversionxmlversion="1.0"encoding="utf-8" ?>
- <configuration>
- <startup>
- <supportedRuntimeversionsupportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5" />
- </startup>
- <appSettings>
- <clear/>
- <add key="connString"value="server=192.168.**.***;database=ThreeLayersSystem;uid=sa;password=123456;"/>
- </appSettings>
- </configuration>
注意这里的 KEY 和Value 是 对应出现的, 这个是远程反问数据库的实例 。
2 connectionStrings配置节:- <?xmlversionxmlversion="1.0"encoding="utf-8" ?>
- <configuration>
- <startup>
- <supportedRuntimeversionsupportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5" />
- </startup>
- <connectionStrings>
- <clear />
- <add name="ConnectionStrings"connectionString="Data Source=192.168.**.***; DataBase=ThreeLayersSystem; User ID=sa; Password=123456"/>
- </connectionStrings>
- </configuration>
- <?xmlversionxmlversion="1.0"encoding="utf-8" ?>
- <configuration>
- <startup>
- <supportedRuntimeversionsupportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5" />
- </startup>
- <connectionStrings>
- <clear />
- <add name="ConnectionStrings"connectionString="Data Source=192.168.**.***; DataBase=ThreeLayersSystem; User ID=sa; Password=123456"/>
- </connectionStrings>
- </configuration>
两者差别几乎很小。
下面说下具体的实例如果建造的
首先建立空白解决方案。
之后建立各层
依次为 添加新项目
表现层(windos窗体),业务逻辑层(类库),数据访问层(类库),实体层(类库)
然后添加各层之间的引用
表现层添加业务逻辑层和实体层
业务逻辑添加数据访问层和实体层
数据访问层添加实体层。
D层还要添加一个为 system.configuration的引用,是对配置文件的引用
下面为具体实例代码了,为VB.NET的代码示例
表现层为UI 代码如下
集中配置文件在U层,为开始的appsettings
以下为windos
窗体的代码
导入引用
- Imports CBLL
- Imports Model
- Public class form1
- PrivateSub cmdOk_Click(sender AsObject, e AsEventArgs) Handles cmdOk.Click
- Me.Login(txtUid.Text, txtPwd.Text)
- EndSub
- ''传递参数,并接受返回的参数
- Private usermanager AsNew BLL.Bll
- PublicSub Login(ByVal userID AsString, ByVal userPwd AsString)
- Dim equal AsStatus = usermanager.userManger(userID, userPwd)
- If (equal = Status.success) Then
- Dispose(userID)
- Me.Close()
- ElseIf (equal = Status.fail) Then
- MsgBox("用户名或密码错误")
- EndIf
- EndSub
- End class
业务逻辑层代码- Imports DAL
- Imports System.Data.SqlClient
- Imports Model
- Namespace CBLL
- Public Class Bll
- '一个方法有几个返回值,几个参数,取决于界面层调用什么东西,也就是需求
- '新建返回为枚举类型的函数
- '对表现层传递的值进行判断,
- '验证成功与否,进行枚举判断。
- Public Function userManger(userID As String, userPwd As String) As Boolean
- Dim userDAL As New DAL.Dal
- Dim userinfo As New User
- userinfo = userDAL.Query(userID, userPwd)
- '判断密码和数据库的一样为true,否则为fail
- If (userinfo._userID <> userID Or userinfo._userPwd <> userPwd) Then
- Return False
- Else
- Return True
- End If
- End Function
- End Class
- End Namespace
数据访问层- Imports Model
- Imports System.Data.SqlClient
- Imports System.Configuration
- Imports System
- Public Class Dal
- '定义私有变量
- Private userinfo AsnewUser
- Private rs As SqlClient.SqlDataReader
- Private conn As SqlClient.SqlConnection
- Private com As SqlClient.SqlCommand
- Private strConnection AsString
- '执行连接字符串,这里用到的是配置文件。
- PublicSubNew()
- conn = New SqlClient.SqlConnection
- strConnection = System.Configuration.ConfigurationManager.AppSettings("connString")
- conn.ConnectionString = strConnection
- Try
- conn.Open()
- Console.WriteLine("数据测试成功")
- Catch ex AsException
- Throw ex
- Finally
- 'conn.Close()
- EndTry
- EndSub
- PublicFunction Query(ByVal userID AsString, ByVal userPwd AsString) AsUser
- '查询用户信息并返回用户信息
- com = New SqlClient.SqlCommand("select * from T_User where userID='" + userID + "'and userPwd='" + userPwd + "'", conn)
- Try
- rs = com.ExecuteReader()
- While (rs.Read)
- userinfo._userID = rs.Item("userID")
- userinfo._userPwd = rs.Item("userPwd")
- EndWhile
- Return userinfo
- Catch ex AsException
- Throw ex
- Finally
- If Not IsNothing(conn) Then
- 'Close()
- EndIf
- EndTry
- EndFunction
- EndClass
- Imports DAL
- Imports System.Data.SqlClient
- Imports Model
- Namespace CBLL
- Public Class Bll
- '一个方法有几个返回值,几个参数,取决于界面层调用什么东西,也就是需求
- '新建返回为枚举类型的函数
- '对表现层传递的值进行判断,
- '验证成功与否,进行枚举判断。
- Public Function userManger(userID As String, userPwd As String) As Boolean
- Dim userDAL As New DAL.Dal
- Dim userinfo As New User
- userinfo = userDAL.Query(userID, userPwd)
- '判断密码和数据库的一样为true,否则为fail
- If (userinfo._userID <> userID Or userinfo._userPwd <> userPwd) Then
- Return False
- Else
- Return True
- End If
- End Function
- End Class
- End Namespace
- Imports Model
- Imports System.Data.SqlClient
- Imports System.Configuration
- Imports System
- Public Class Dal
- '定义私有变量
- Private userinfo AsnewUser
- Private rs As SqlClient.SqlDataReader
- Private conn As SqlClient.SqlConnection
- Private com As SqlClient.SqlCommand
- Private strConnection AsString
- '执行连接字符串,这里用到的是配置文件。
- PublicSubNew()
- conn = New SqlClient.SqlConnection
- strConnection = System.Configuration.ConfigurationManager.AppSettings("connString")
- conn.ConnectionString = strConnection
- Try
- conn.Open()
- Console.WriteLine("数据测试成功")
- Catch ex AsException
- Throw ex
- Finally
- 'conn.Close()
- EndTry
- EndSub
- PublicFunction Query(ByVal userID AsString, ByVal userPwd AsString) AsUser
- '查询用户信息并返回用户信息
- com = New SqlClient.SqlCommand("select * from T_User where userID='" + userID + "'and userPwd='" + userPwd + "'", conn)
- Try
- rs = com.ExecuteReader()
- While (rs.Read)
- userinfo._userID = rs.Item("userID")
- userinfo._userPwd = rs.Item("userPwd")
- EndWhile
- Return userinfo
- Catch ex AsException
- Throw ex
- Finally
- If Not IsNothing(conn) Then
- 'Close()
- EndIf
- EndTry
- EndFunction
- EndClass
实体 层 一个为数据库对应的字段,User类
- Imports System.Data
- Imports System.Data.SqlClient
- Imports System.Configuration
- Imports Model.Status
- PublicClassUser
- #Region"定义user表中各个属性变量"
- Private userID AsString''用户ID
- Private userPwd AsString''用户密码
- Private userName AsString''用户名
- #EndRegion
- #Region"获取数据库的变量"
- PublicProperty _userID AsString
- Get
- Return userID
- EndGet
- Set(value AsString)
- userID = value
- EndSet
- EndProperty
- PublicProperty UserState AsStatus
- Get
- Return state
- EndGet
- Set(value AsStatus)
- state = value
- EndSet
- EndProperty
- PublicProperty _userPwd AsString
- Get
- Return userPwd
- EndGet
- Set(value AsString)
- userPwd = value
- EndSet
- EndProperty
- #EndRegion
- EndClass