三层之抽象工厂加反射实例
2017-04-20 11:56
597 查看
C#版的三层登陆实例,仅仅是为了学习三层而实现的。为了接下来须要进行的vb.net版机房收费系统。
依据上次的C#改编的vb.net版本号登陆实例。只是在验收的时候发现了非常多问题。所以进行了改动。
花费好几天的时间。最终从C#转化成了vb.net版本号。期间參考了一些师哥师姐的博客来理解三层是怎样交互的。
起初上一篇实例,并非非常懂,仅仅是理解了个大概。然后依据那么多材料来进行对照。最终看懂他们是怎么进行操作的。
就说看了那么多不相同式的实例之后,才知道谁的设计方案更好。知识是不变的。可是设计理念就能看出代码运行效率的高低。
在使用三层的过程中,才干真正体会到。什么叫高内聚,低耦合。在程序发现错误之后。能把错误的细节定位到详细一层,甚至详细一类。
只改动或更换这一类就能调试出来。使得调试代码的量变的极底。
这就是使用三层的优点吧。
下面是本实例的设计,这个实例 是模仿上篇实例得到的。所以名称有些不规范,请见谅。
数据库还是使用的上次的数据可。没有变动。
通过对实例的不断分解,单一职责划分。
得到下图的引用关系。
接下来看一下各个层次的代码:
UI层:
Public Class Form1 Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click Try Dim user1 As New Login.Moudel.UserInfoEntity Dim user2 As New Login.Moudel.UserInfoEntity '使用user2来进行登陆 user2.USERNAME = txtUserName.Text.Trim user2.PASSWORD = txtPassword.Text Dim mgr As New Login.BLL.LoginManager user1 = mgr.SelectUserLogin(user2) '将登陆返回的结果存放到user1中 MessageBox.Show("登陆用户:" + user1.USERNAME) '通知用户登陆成功 Catch ex As Exception MessageBox.Show(ex.Message.ToString()) '登陆失败,通知用户 End Try End Sub '退出系统 Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click End End Sub End Class
B层:
Public Class LoginManager Function SelectUserLogin(ByVal User As Login.Moudel.UserInfoEntity) As Login.Moudel.UserInfoEntity Dim bUser As LoginIDAL.IUser bUser = Factory.DataAccess.CreateUser() Dim rUser As New Login.Moudel.UserInfoEntity '定义一个数据实体 rUser = bUser.SelectUser(User) '依据參数 查找数据库 并返回一个实体 If IsNothing(rUser.USERNAME) Then '推断username是否存在 Throw New Exception("username 不存在") End If If rUser.PASSWORD = User.PASSWORD Then '推断password是否正确 Return rUser Else Throw New Exception("登陆失败,请检查usernamepassword") End If End Function End Class
D层:
Public Class DbConnStr Public Shared Function Connstring() As String Connstring = "Server=zc-pc;Database=UBDLogin;User ID=sa; Password=123456" End Function End Class
Imports System.Data.SqlClient Imports System.Data Public Class SqlServerDAO : Implements LoginIDAL.IUser Function SelectUser(ByVal user As Login.Moudel.UserInfoEntity) As Login.Moudel.UserInfoEntity Implements LoginIDAL.IUser.SelectUser Dim conn As New SqlConnection '创建链接对象 Dim cmd As New SqlCommand '创建命令对象 conn = New SqlConnection(DbConnStr.Connstring()) '链接数据库 cmd.Connection = conn cmd.CommandText = "Select * from Users Where UserName=@UserName" ' and Password=@Password" cmd.Parameters.Add(New SqlParameter("@UserName", user.USERNAME)) 'cmd.Parameters.Add(New SqlParameter("@Password", user.PASSWORD)) cmd.CommandType = CommandType.Text conn.Open() Dim reader As SqlDataReader = cmd.ExecuteReader '运行生成一个dataReader Dim rUser As New Login.Moudel.UserInfoEntity '用于保存返回实体 While (reader.Read()) rUser.USERNAME = reader.GetString(1) rUser.PASSWORD = reader.GetString(2) rUser.LEVEL = reader.GetString(3) rUser.EMAIL = reader.GetString(4) End While Return rUser '返回取出得到的实体 conn.Close() End Function End Class
IDAL:
Public Interface IFactory '工厂类 Function CreateUser() As LoginIDAL.IUser End Interface
Public Interface IUser Function SelectUser(ByVal user As Login.Moudel.UserInfoEntity) As Login.Moudel.UserInfoEntity End Interface
Entity:
Public Class UserInfoEntity Private _userID As String Private _userName As String Private _password As String Public Property USERNAME() As String '属性username Get Return _userName End Get Set(value As String) _userName = value End Set End Property Public Property PASSWORD() As String '属性usernamepassword Get Return _password End Get Set(value As String) _password = value End Set End Property End Class
总结:三层架构,不过一种设计理念。
帮助我们来优化代码。减少代码之间的耦合。只通过几天的学习。是不可能所有掌握的。这样的东西。就好比学习 面向对象的 思想, 须要在长期的实践 应用中,才干体会到里面的精髓。
相关文章推荐
- [转]三层之抽象工厂加反射实例
- 三层之抽象工厂加反射实例
- 三层之抽象工厂加反射实例
- DRP项目(十):抽象工厂加反射框架实例(二)
- asp.net一个带抽象工厂的三层架构完整实例
- 三层架构之抽象工厂加反射——实现数据库转换
- 三层架构之抽象工厂加反射----实现数据库转换
- 三层架构之抽象工厂加反射----实现数据库转换
- 三层架构之抽象工厂加反射----实现数据库转换
- 三层架构之抽象工厂加反射
- 浅谈Java设计模式——单实例、简单工厂、抽象工厂、观察者
- 抽象工厂的实例
- 抽象工厂核心反射
- 三层架构之简单工厂改造抽象工厂中配置文件的添加
- 实战才是王道:工厂模式、三层架构、反射、多数据库问题
- Java技术_每天掌握一种设计模式(004)_使用场景及简单实例(创建型:抽象工厂)
- c#抽象工厂实例
- 抽象工厂+反射(未能加载文件或程序集 “DAL”或它的某一个依赖项。系统找不到指定的文件)
- 跟着实例学习设计模式(5)-工厂方法 、抽象工厂的区别
- 三层,接口,简单工厂,抽象工厂