三层架构——实践篇(二)

     三层学习进行至今也已一周多的时间,已经对其基本的理论思想有了大致的掌握,前两篇介绍了三层架构的基本理论以及一个小的登录demo,为了更好的练习,今天再说说另外一个例子课程管理三层版.

       首先介绍方案实现的简单功能:1.对课程信息的添加;2.依据课程编号对课程信息的删除;3.课程信息浏览。

       UI界面如下:

三层架构——实践篇(二)_第1张图片

       三层架构划分:

      

       图中Modal存储对应数据库ELECTIVE中表T_Course的实体类Course,对应字段有:课程编号CourseID、课程名称CourseName、课程学分CourseCredit,到实体类中则对应相应属性存储,这种面向对象的类与关系数据库的表的对应称为ORM(对象关系映射)

ORM的实现如下:

'定义实体类,存储数据表T_Course中记录信息
Public Class Course
    '声明私有字段course_Id,course_Name,course_Credit
    Private course_Id As String
    Private course_Name As String
    Private course_Credit As Integer
    '定义CourseID属性,对应数据库表中第一个字段
    Public Property CourseID As String
        Get
            Return course_Id
        End Get
        Set(value As String)
            course_Id = value
        End Set
    End Property
    '定义CourseName属性,对应数据库表中第二个字段
    Public Property CourseName As String
        Get
            Return course_Name
        End Get
        Set(value As String)
            course_Name = value
        End Set
    End Property
    '定义CourseCredit属性,对应数据库表中第三个字段
    Public Property CourseCredit As Integer
        Get
            Return course_Credit
        End Get
        Set(value As Integer)
            course_Credit = value
        End Set
    End Property
End Class
       Common项目中存放公用文件,在这里存放Doutil类,用于存储访问数据库的基本操作,类似于DbHepler,供数据访问层调用.

Doutil实现代码如下:

'对数据库访问的操作公共方法
Public Class Doutil

    '连接数据库字符串
    Public Shared Function connstring() As String
        connstring = "Server=LI;Database=ELECTIVE;User ID=sa;Password=123456"
    End Function
    '根据传入SQL执行语句,执行数据库的非查询操作,返回整型
    Public Shared Function ExecNonQuery(strSql As String) As Integer
        Dim conn As SqlClient.SqlConnection
        Dim cmd As SqlClient.SqlCommand

        conn = New SqlClient.SqlConnection(Doutil.connstring())  '调用Connstring方法连接数据库
        cmd = conn.CreateCommand()          '创建执行命令
        cmd.CommandText = strSql            '执行命令字符串
        cmd.CommandType = CommandType.Text
        conn.Open()
        Try
            cmd.ExecuteNonQuery()          '执行命令
        Catch ex As Exception
            Return 0                       '执行命令存在异常则返回0
        End Try
        Return 1                           '执行完成返回1
    End Function
    '对数据库表的查询操作方法,返回查询结果
    Public Function GetReader(strSql As String) As SqlClient.SqlDataReader
        Dim conn As SqlClient.SqlConnection
        Dim cmd As SqlClient.SqlCommand
        Dim reader As SqlClient.SqlDataReader

        conn = New SqlClient.SqlConnection(Common.Doutil.connstring())  '调用connstring连接数据库
        cmd = conn.CreateCommand()          '创建命令
        cmd.CommandText = strSql            '执行命令字符串
        cmd.CommandType = CommandType.Text
        conn.Open()
        reader = cmd.ExecuteReader()        '执行查询操作
        Return reader                       '返回查询结果
        conn.Close()
    End Function
End Class

五个项目之间的关系如图:

三层架构——实践篇(二)_第2张图片

数据添加的三层实现:

        设计流程:

         代码实现

         DAL:

          

    '根据传入参数检查主键课程编号是否已经存在,返回布尔型
    Public Function Exist(courseID As String) As Boolean
        Dim strSql As String
        Dim reader As SqlClient.SqlDataReader
        Dim common = New Common.Doutil

        strSql = "select * from T_Course where CourseID = " & courseID & ""        'SQL具体查询语句
        reader = common.GetReader(strSql)             '调用GetReader方法,实现查询语句的具体执行

        '判断结果集中是否有记录,存在则返回True,否则返回False
        If (reader.HasRows) Then
            Return True
        Else
            Return False
        End If
    End Function

    '根据传入实体类Course参数,进行记录的添加,返回1说明添加成功,返回0说明添加失败
    Public Function AddCourse(course As BFCourse.Modal.Course) As Integer
        Dim strSql As String
        strSql = "Insert into T_Course(CourseID,CourseName,CourseCredit) values(" & course.CourseID & " , " & course.CourseName & " , " & course.CourseCredit & ")"
        Return Common.Doutil.ExecNonQuery(strSql)         '调用访问数据的模块方法实现插入数据操作
    End Function

          BLL:

    '添加课程方法AddCourse,无返回值,以弹出消息框方式显示是否成功
    Public Sub AddCourse(course As BFCourse.Modal.Course)
        Dim courseDAO = New BFCourse.DAL.CourseDAO      '调用DAL的数据访问对象

        If courseDAO.Exist(course.CourseID) Then    '调用DAL的Exist方法判断账号是否存在,存在则弹出消息框提示并退出
            MsgBox("此账号已存在,请重新输入")
            Return
        End If
        If (courseDAO.AddCourse(course) > 0) Then   '调用DAL的AddCourse方法,返回1添加成功
            MsgBox("添加成功")
        Else                                        '返回0添加失败
            MsgBox("添加失败")
        End If
    End Sub
        UI:

    Public cb As New BFCourse.BLL.CourseBiz            '调用BLL
    '课程添加功能实现
    Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
        Dim course As BFCourse.Modal.Course            '声明实体类Course

        '判断用户输入课程编号框是否为空值,是则退出
        If (Trim(txtCourseID.Text) = "") Then
            MsgBox("请输入课程编号")
            Return
        End If

        '判断用户输入课程名称框是否为空值,是则退出
        If txtCourseName.Text = String.Empty Then
            MsgBox("请输入课程名称")
            Return
        End If

        '判断用户输入课程学分框是否为空值,是则退出
        If txtCourseCredit.Text = String.Empty Then
            MsgBox("请输入课程学分")
            Return
        End If


        course = New BFCourse.Modal.Course         '实例化实体类Course
        course.CourseID = "'" & Trim(txtCourseID.Text) & "'"   '根据用户输入向course属性CourseID赋值
        course.CourseName = "'" & Trim(txtCourseName.Text) & "'"  '根据用户输入向course属性CoureName赋值
        course.CourseCredit = Convert.ToInt32(Trim(txtCourseCredit.Text))    '根据用户输入向course属性CourseCredit赋值

        cb.AddCourse(course)         '调用BLL的AddCourse方法实现添加课程
        dvwCourse.DataSource = cb.GetCourseList()    '刷新课程浏览
    End Sub

课程删除的三层实现

        设计流程:


        代码实现

       DAL:

    '根据传入课程编号courseID实现删除该字段的功能
    Public Function DelCourse(courseID As String) As Integer
        Dim strSql As String

        strSql = "delete from T_Course where CourseID= " & courseID & ""   '具体删除记录的SQL语句参数
        Return Common.Doutil.ExecNonQuery(strSql)                   '根据传入的SQL语句参数,调用访问数据的模块方法实现具体操作
    End Function
         BLL:

    '删除课程方法DelCourse,无返回值,以弹出消息框方式显示是否成功
    Public Sub DelCourse(courseID As String)

        Dim courseDAO = New BFCourse.DAL.CourseDAO     '调用DAL的数据访问对象


        If (courseDAO.Exist(courseID) = False) Then    '调用Exist方法判断对应课程编号记录是否存在
            MsgBox("此课程号不存在,请重新输入")
            Return                                     '存在则退出
        End If
        If courseDAO.DelCourse(courseID) > 0 Then      '调用DelCourse方法删除记录,返回1则成功,返回0则失败
            MsgBox("删除成功")
        Else
            MsgBox("删除失败")
        End If
    End Sub

         UI:

    '根据用户输入课程编号实现删除课程记录
    Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
        '判断用户输入课程编号是否为空,是则退出
        If txtDCourseID.Text = String.Empty Then
            MsgBox("请输入课程编码")
            Return
        End If

        cb.DelCourse("'" & Trim(txtDCourseID.Text) & "'")    '调用BLL的DelCourse方法,实现课程删除操作
        dvwCourse.DataSource = cb.GetCourseList()  '刷新浏览记录信息
    End Sub

  课程浏览的三层实现:

        设计流程如记录添加的流程

        代码实现

        DAL

    '得到表T_Course的全部记录并传给集合
    Public Function GetCourseList() As List(Of BFCourse.Modal.Course)
        Dim list = New List(Of BFCourse.Modal.Course)
        Dim rd As SqlClient.SqlDataReader
        Dim strSql As String
        Dim common = New Common.Doutil
        Dim course As BFCourse.Modal.Course

        strSql = "select * from T_Course"    '具体实现的SQL语句
        rd = common.GetReader(strSql)        '根据具体SQL语句调用具体实现方法

        '逐条读取记录,向集合中添加内容
        While (rd.Read())
            course = New BFCourse.Modal.Course
            course.CourseID = rd(0).ToString()
            course.CourseName = rd(1).ToString()
            course.CourseCredit = rd(2).ToString()
            list.Add(course)
        End While
        Return list       '返回读取结果集合
    End Function

         BLL:

    '获取整个T_Course的全部记录
    Public Function GetCourseList() As List(Of BFCourse.Modal.Course)
        Dim courseDAO = New BFCourse.DAL.CourseDAO    '调用DAL的数据访问对象CourseDAO
        Return courseDAO.GetCourseList()              '调用GetCourseList方法返回集合信息
    End Function

        UI:

       加载窗体时,删除或添加记录成功后调用BLL的GetCourseList()方法

    '加载窗体时,实现课程记录的显示操作
    Private Sub frmCourse_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        dvwCourse.DataSource = cb.GetCourseList()    '显示全部课程信息记录
    End Sub

三层之间调用关系为:

        小结:在对此阶段内容学习,看到了对数据库实现操作的不足,主要还是缺少练习,希望能在今后的项目中多多实践,还有便是对设计方面的学习上始终还没有对自己真正的练习使用,期待接下来的学习吧。





你可能感兴趣的:(三层架构——实践篇(二))