【机房重构】注册

来源:互联网 发布:机房环境监控系统源码 编辑:程序博客网 时间:2024/05/22 16:30

    机房重构开始有一断时间了,这个过程对于我来说并不容易,由开始的三层登录实现,到后来的七层登录实现,很多人说只要这条线通了以后就容易多了,但是通过这个过程对于我来说并没有那么容易,这个过程总会出现这样那样的问题。

    以注册为例,我的 数据库设计的是卡表和学生表分开的,当初为了敲出另外一条线,没有首先判断卡号是否存在,只是单纯的将信息插入了card表,没有插入student表,因为还不知道怎么同时插入两张表,也不知道怎么怎么要判断完卡号之后再去决定要不要将相关信息插入数据库。通过与同学们的交流和我的摸索,写出了如下代码,为了方便我在D层传了两个实体,实现同时插入Card表和Student表。代码如下:

    第一步,封装实体,将注册表中的各个字段都写入实体中,方便以后各层的调用,这里代码比较简单就省略了。

    第二步,创建接口方法

<span style="font-family:KaiTi_GB2312;font-size:18px;"> ''' <summary>    ''' 创建注册的方法,为了方便在此两个参数    ''' </summary>    ''' <param name="card"></param>    ''' <param name="student"></param>    ''' <returns></returns>    ''' <remarks>2015年4月10日11:21:38</remarks>    Function RegisterCard(ByVal card As Entity.EntityCard, ByVal student As Entity.EntityStudent) As Boolean</span>

    第三步,创建抽象工厂+反射

<span style="font-family:KaiTi_GB2312;font-size:18px;">Imports IDALImports System.DataImports System.ReflectionImports System.Configuration'FactoryPublic Class FactoryDB    Private Shared ReadOnly AssemblyName As String = "DAL" '数据程序集名称    Dim strDB As String = System.Configuration.ConfigurationSettings.AppSettings("DB")    Dim strCard As String = System.Configuration.ConfigurationSettings.AppSettings("DB")      ''' <summary>    ''' 实例化一个DAL中的Card表的类    ''' </summary>    ''' <returns></returns>    ''' <remarks>2015-4-10 11:32:48</remarks>    Public Function CreateCard() As IDAL.ICard        Dim classname As String = "DAL" + "." + strDB + "CardDAL"        Return CType(Assembly.Load(AssemblyName).CreateInstance(classname), IDAL.ICard)        '' Return CType(Assembly.Load("DAL").CreateInstance("DAL" & "." & strCard), IDAL.ICard)    End Function</span>

     第四步,D层实现接口的方法,这里会用到sqlHelper,对于封装的sqlHelper详见博客:【机房重构】sqlHelper.

<span style="font-family:KaiTi_GB2312;font-size:18px;">    ''' <summary>    ''' 注册新卡    ''' </summary>    ''' <param name="card"></param>    ''' <param name="student"></param>    ''' <returns>返回Boolean型</returns>    ''' <remarks>2015-4-10 14:19:00</remarks>    Public Function RegisterCard(card As EntityCard, student As EntityStudent) As Boolean Implements ICard.RegisterCard        Dim Sql As String        Dim table As Boolean        Dim sqlParams As SqlParameter() = {New SqlParameter("@CardNo", card.Card),                                           New SqlParameter("@StudentNo", card.Student),                                           New SqlParameter("@Date", card.RDate),                                           New SqlParameter("@Time", card.RTime),                                           New SqlParameter("@Balance", card.BL),                                           New SqlParameter("@ID", card.ID),                                           New SqlParameter("@Check", card.Check),                                           New SqlParameter("@Type", card.CardType),                                           New SqlParameter("@Status", card.CardStatus)}        Sql = "Insert into Card_Info(CardNo,StudentNo,RegisterDate,RegisterTime,Balance,IsCheck,userID,Type,Status) Values(@CardNo,@StudentNo,@Date,@Time,@Balance,@Check,@ID,@Type,@Status)"        table = sqlHelper.ExecAddDelUpdate(Sql, CommandType.Text, sqlParams)            If table = True Then            Dim Asql As String            Dim flag As Boolean            Dim params As SqlParameter() = {New SqlParameter("@StudentNoo", student.Student),                                            New SqlParameter("@Name", student.StudentName),                                            New SqlParameter("@Sex", student.StudentSex),                                            New SqlParameter("@Department", student.Dept),                                            New SqlParameter("@Grade", student.StudentGrade),                                            New SqlParameter("@Class", student.StudentClass),                                            New SqlParameter("@Comment", student.SCommant)}            Asql = "Insert into Student_Info(StudentNo,Name,Sex,Department,Grade,Class,Comment) Values(@StudentNoo,@Name,@Sex,@Department,@Grade,@Class,@Comment)"            flag = sqlHelper.ExecAddDelUpdate(Asql, CommandType.Text, params)            Return flag        End If        Return table    End Function</span>

    第五步,B层实现抽象工厂和接口的方法,在这里要进行逻辑判断。

<span style="font-family:KaiTi_GB2312;font-size:18px;">Public Class CardBLL    '实现抽象工厂和接口的方法    ''' <summary>    ''' 注册卡号    ''' </summary>    ''' <param name="card"></param>    ''' <returns></returns>    ''' <remarks>2015-4-10 14:57:22</remarks>    Public Function AddCard(ByVal card As Entity.EntityCard, ByVal student As Entity.EntityStudent) As Boolean        Dim factory As New Factory.FactoryDB        Dim Acard As IDAL.ICard        Dim Aflag As DataTable        Dim flag As Boolean        Acard = factory.CreateCard        Aflag = Acard.IsExitCard(card)        If Aflag.Rows.Count = 0 Then            flag = Acard.RegisterCard(card, student)            If flag = True Then                MsgBox("注册卡号成功", , "提示")            Else                MsgBox("未注册成功", , "提示")            End If        Else            MsgBox("此卡号已存在", , "提示")        End If        Return flag    End FunctionEnd Class</span>

    第六步,Facade层,调用B层方法将U层数据传入B层或返回数据给U层


<span style="font-family:KaiTi_GB2312;font-size:18px;">Public Class RegisterCardFAC    ''' <summary>    ''' 注册卡号    ''' </summary>    ''' <param name="card"></param>    ''' <returns></returns>    ''' <remarks>2015-4-10 15:04:41</remarks>    Public Function AddCard(ByVal card As Entity.EntityCard, ByVal student As Entity.EntityStudent) As Boolean        Dim add As New BLL.CardBLL()        Dim flag As Boolean        flag = add.AddCard(card, student)        Return flag    End FunctionEnd Class</span>

    第七步,U层,将输入的内容传给实体,通过外观层,进行传参。

<span style="font-family:KaiTi_GB2312;font-size:18px;">Public Class frmRegister    Private Sub frmRegister_Load(sender As Object, e As EventArgs) Handles MyBase.Load        ComboType.Items.Add("临时用户")        ComboType.Items.Add("固定用户")        comboSex.Items.Add("男")        comboSex.Items.Add("女")        ComboStatus.Items.Add("使用")    End Sub    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click        Dim CardFacade As New Facade.RegisterCardFAC        '实例化实体类卡        Dim card As New Entity.EntityCard        '实例化实体类学生        Dim student As New Entity.EntityStudent        '调用卡        card.ID = LoginUI.txtUserName.Text.Trim()        card.BL = txtChargeMoney.Text        card.Student = txtStudentNo.Text        card.Card = txtCardNo.Text.Trim()        card.CardType = ComboType.Text        card.RDate = DateTime.Now.ToLongDateString()        card.RTime = DateTime.Now.ToLongTimeString()        card.CardStatus = ComboStatus.Text        card.Check = "未结账"        student.Student = txtStudentNo.Text        student.StudentName = txtStudentName.Text        student.StudentSex = comboSex.Text        student.Dept = txtDept.Text        student.StudentGrade = txtGrade.Text        student.StudentClass = txtClass.Text        student.SCommant = txtComment.Text        Dim flag1 As Boolean        flag1 = CardFacade.AddCard(card, student)    End SubEnd Class</span>

    总结:

    每一个功能都是按照这样的一个顺序进行编写的,当敲的多了发现其实并不难,机房重构和第一次机房的时候是一样的,万事开头难,当明白之后发现敲代码是一个很享受的过程,不过敲完之后的调试更是一个技术活。注册这个功能涉及到两个实体,两个表,这里可以定义一个超体,将卡表和学生表合在一起写作一个实体类,这样就不用传两个实体了,听同学们说也可以使用存储过程,这个我还没有尝试,在接下来时间里慢慢的去熟悉它。机房,我会加油的!

0 0
原创粉丝点击