三层架构实例 VB.NET版
三层实例
首先发现感慨,对于三成这块,用到都是一些面向对象的特征,尤其是对象的实例化。如果你不是很注意的话,那么,你就会一头雾水,就像我一样,慢慢的雾里看花,最后也是走出来的,不过用的事件是相当的。
对象的实例,vb.net 和C#是很好的选择。这里我先是用了c#,然后用的vb.net,它们的一些语法是有些不同的,声明,c#直接是在前声明, erVB.Net是在后声明,是类名称或类型在后紧跟。
然后说的一点就是命名空间的引用,出入不是很大,
Using 加核心命名为C#专用 ,imports +核心命名为vb.net的专用
当然也少不了添加引用了。
对于期间用到的数组和配置文件,这里不详细说明了。
简单说下配置文件。
两者的配置文件出入很小。
1. appSettings配置节
<!--数据库连接串--><?xmlversion="1.0"encoding="utf-8" ?><configuration> <startup> <supportedRuntimeversion="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配置节:
<?xmlversion="1.0"encoding="utf-8" ?><configuration> <startup> <supportedRuntimeversion="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 CBLLImports ModelPublic class form1PrivateSub 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("用户名或密码错误") EndIfEndSubEnd class
Imports DALImports System.Data.SqlClientImports ModelNamespace 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 ClassEnd Namespace
Imports ModelImports System.Data.SqlClientImports System.ConfigurationImports SystemPublic 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.DataImports System.Data.SqlClientImports System.ConfigurationImports Model.StatusPublicClassUser#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#EndRegionEndClass