【机房收费系统】抽象

是否为空?一开始我是用的isnull 来逐个判断的,但是重复的地方的确很多。我们秉着一个重复就要努力抽象的原则,同时争取相似的功能用不同的实现方式。今天算是做个小结,抛砖引玉,希望大家多多的提宝贵意见。

抽象,是为了实现更好的代码复用,也便于日后的维护。希望在做合作版的时候,能对这些问题有一个更加深刻的理解。

判断用户名是否存在

这可以单独写一个方法或是小类。

判断是否为空

以下是参照高晓青师傅的博客写的。

''' <summary>
''' 判断窗体上所有控件是否为空
''' </summary>
''' <remarks>Boolean</remarks>

Public Class IsRight
    Public Function isNull(log As Windows.Forms.Control.ControlCollection) As Boolean
        Dim ConObject As New Control
        Dim flag As Boolean
        flag = True  '默认所有控件内部都有值
        For Each ConObject In log
            '利用TypeOf 查看空间类型
            If TypeOf (ConObject) Is TextBox Then
                If ConObject.Text.Trim = "" Then 'Tag代表当前为空的控件
                    MsgBox(ConObject.Tag.ToString + "不能为空,请输入完整", vbOKOnly, "提示")
                    ConObject.Focus()
                    flag = False
                    Return flag
                    Exit Function
                End If
            End If
        Next
        Return flag
    End Function

    ''' <summary>
    ''' 判断是否为数字
    ''' </summary>
    ''' <param name="log"></param>
    ''' <returns></returns>
    ''' <remarks>Boolean</remarks>
    Public Function IsNumberic(log As Windows.Forms.Control.ControlCollection) As Boolean
        Dim ConObject As New Control
        Dim flag As Boolean
        flag = True  '默认所有控件内部都有值
        For Each ConObject In log
            '利用TypeOf 查看空间类型
            If TypeOf (ConObject) Is TextBox Then
                If IsNumeric(ConObject.Text) = False Then 'Tag代表当前为空的控件
                    MsgBox(ConObject.Tag.ToString + +"   " + "请输入数字", vbOKOnly, "提示")
                    ConObject.Focus()
                    flag = False
                    Return flag
                    Exit Function
                End If
            End If
        Next
        Return flag
    End Function

这样一个类,能循环判断所有的控件是否为空,或是否为数字。当然,仔细看了上面一个代码你就会了解到,我们还需要在设计空间的时候,将每个空间写上它们自己的名字,方便给出精准的提示。

这个类直接放在U层即可。

那我们看看它的客户端调用时这样的。

        Dim MyObject As New IsRight
        Dim MyObjectNum As New IsRight

        If MyObject.isNull(Controls) = False Then
            Exit Sub
        End If
        If MyObjectNum.IsNumberic(Controls) = False Then
            Exit Sub
        End If

获取数据库时间

U层

Public Class GetTime
    Shared Function GetDate() As Date
        Dim getDate1 As New BLL.TimeBLL
        Return getDate1.GetDate
    End Function

    Shared Function GetTime() As Date
        Dim getTime1 As New BLL.TimeBLL
        Return getTime1.GetTime
    End Function
End Class

B层只是个传递,并无实质性内容。我们看看D层的代码。你能一眼找到关键的两句么

    ''' <summary>
    ''' 获取日期
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetDate() As Date Implements ITime.GetDate
        Dim sql As String '定义字符串变量sql 用于存放要执行的语句
        sql = "Select CONVERT(varchar(100), GETDATE(), 23)  " '获取日期的代码
        Dim cmdType As CommandType = CommandType.Text 'commandType 指定如何解释命令字符串
        Dim sqlHelper As New Global.sqlHelper.sqlHelper '实例化sqlHelper这个类的对象
        Dim dt As New DataTable
        Dim SqlDate As String
        dt = sqlHelper.ExecSelectNo(sql, CommandType.Text)
        SqlDate = dt.Rows(0)(0).ToString
        Return SqlDate
    End Function

    ''' <summary>
    ''' 获取时间
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetTime() As Date Implements ITime.GetTime
        Dim sql As String '定义字符串变量sql 用于存放要执行的语句
        sql = "Select CONVERT(varchar(100), GETDATE(), 24)  "
        Dim cmdType As CommandType = CommandType.Text 'commandType 指定如何解释命令字符串
        Dim Parameter As SqlParameter() 'sqlParameter表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射
        Parameter = {}
        Dim sqlHelper As New Global.sqlHelper.sqlHelper '实例化sqlHelper这个类的对象
        Dim dt As New DataTable
        Dim SqlTime As Date
        dt = sqlHelper.ExecSelectNo(sql, CommandType.Text)
        SqlTime = dt.Rows(0)(0).ToString
        Return SqlTime
    End Function
End Class

机房收费系统,是我们自己亲自赋予生命的一个系统。感谢它让我开始对敲代码有了更多的思考。我们有了很大的空间去思考如何让我们的代码更灵活和更健壮。我们从码农开始,会走的越来越远。还是那句话,希望本文能抛砖引玉,你的机房,你是怎么抽象和优化的呢?欢迎各位留下宝贵意见。

【机房收费系统】抽象

时间: 2025-01-08 02:14:45

【机房收费系统】抽象的相关文章

重构机房收费系统总结1之配置文件+反射+抽象工厂

在重构机房收费系统之前就一直听说这次重构要用反射+配置文件.深远的作用不知道,但是在这次重构用到,目的还是挺明确的:就是为了更换数据时方便,遵循开放-封闭原则,解决了可维护和可扩展的问题. 下面就以机房收费系统登录为例来看看配置文件+反射的用法.机房收费系统登录用到的数据库表是User_info表(用户表).我利用的是三层思想,先看一下我的整体架构! 下面看看配置文件+反射+抽象工厂在登录时访问数据库User表时的用法. 1.先进行配置文件操作 步骤:(1)在VS资源管理器的新建项目UI中,会有

【机房收费系统】多么痛的领悟

这次机房收费系统,是所有的项目中,自己完成的最不满意的了. 时间之长,效率之慢.一开始,就感觉无从下手,但总会相信自己能慢慢的进入状态.终于有机会自己练练手了,也自认为之前自己设计模式学的还不错,也终于有机会能自己想想设计模式了.该是一件多么帅的事.拖了这么久,到现在只用上了外观 抽象工厂 模板 个人版就这么结束了.真心不想再拖一天了. 话说,并不觉得自己敲代码会比别人差多少.一开始敲完三层,又开始画图.还是一头的雾水.设计数据库,终于有了一点自己的想法也重温了之前学习的数据库原理,还是比较欣慰

总结个人版机房收费系统

个人版机房收费系统是在学习完vb.net语言和三层架构思想后的第一个系统,我们要从C/S向B/S进发过程中一个铺路石,在没开始C/S之前,虽然没有什么直接的联系.但学习就是有很多共同的地方,在这个过程中有很多知识是在巩固,有很多东西新接触或者实践.我最大的感受就是,走过了这个过程就一定会带走些什么. 个人版机房收费和第一版系统有很多相同的地方,这些相同的地方就在进行重构的过程中,帮助我们i+1. 比如: 1.开发语言:虽然一个用的是vb一个是vb.net.但不得不说有了第一版的经验,重构版用起来

【机房收费系统】磕磕绊绊中总结

每一个庞然大物来之前,总是心里不自觉的退缩一下.这一次,把我自己当成了奥特曼. 命名规范文档 最先看的是这个.有了标准后,才能见其名 知其意. 数据库设计 敲完三层登陆小demo,这一次重新着手,从ER图开始设计数据库.又翻了翻自考的书,把机房收费系统中可能抽出来的实体画出来 又开始一个个找联系.转换为逻辑结构.可能根据业务的不同,表和主键会稍微有些变化.比如,是否允许一个学生有多张卡,退卡之后原来的卡号还能否再注册,退卡是是否要删除记录等修改或添加一些辅助标记字段,也涉及到一些其他问题,例如添

机房收费系统——UML类图

在对一个软件系统进行设计和建模的时候,通常是从构造系统的基本词汇开始,包括构造这些词汇的基本属性和行为.系统分析师如果要对所设计的系统清晰认识,还有考虑这些基本词汇之间的关系.而如果把这些行为可视化为图,就是通常所说的类图. 类图(Class Diagram)是描述类.接口.协作以及它们之间关系的图,用来显示系统中的各个类的静态结构. 类图包括3方面内容: 1.类(Class): 2.接口: 3.关系: 类 类是对一组具有相同属性.操作.关系和语义的对象的描述. 主要包括:类的名称(ClassN

#【数据库】机房收费系统数据库设计

前言 前一段时间要参加自考,要考<数据库原理>,在其中也更加了解了好多数据库的问题.比如,如何创建一个好的数据库,怎么创建数据库. 图一 数据库创建框架 现在开始机房的重构,以前用的是师哥师姐设计的数据库,现在发现自己也可以设计出来了,所以,按这步骤来自己设计一个机房收费系统的数据库. 一.规划 由于机房收费系统是第二遍做的,所以在总体规划阶段很容易看出系统在技术.经济.效益.法律是可行的:目标就是要更好的搭配应用程序合理运行. 二.需求分析 这一阶段是计算机人员(系统分析员)和用户双方共同收

VB.NET机房收费系统总结

总感觉这次机房收费系统很有份量,一直没有下手总结,从2014-7-27至2014-9-29,这中间有太多故事和成长.首先说一下两次机房收费系统的不同,它是我们从面向过程向面向对象的一个转变,在.NET平台下开发,采用三层思想,并添加了一些设计模式,然后说一下我的变化,不管从思想还是技术上绝对是一笔财富,经过这次机房收费系统,我更加坚信两句话:"出来混迟早都要还的""一切都会过去的". 这次个人重构:7.27-8.11(画图阶段,其中包括数据设计2天):8.12-9.

VB.NET版机房收费系统---SqlHelper

SqlHelper,最早接触这个词儿的时候,好像是13年的暑假,那个夏天来的比往年来的稍晚一些,呵呵,sqlhelper,翻译成中文就是数据库助手,帮手.百度百科这样对她进行阐述: SqlHelper是一个基于.NET Framework的数据库操作组件.组件中包含数据库操作方法.SqlHelper用于简化我们重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等.SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,

机房收费系统重构之用户登录

机房收费系统开始了有一段时间了,但是感觉自己对于这一条线还是理解的不太深刻,导致后面也快不起来,所以来分析一下这用户登录的过程. 如果是纯三层的话,理解起来差不多,无非就是在层与层之间传递,但是随着用户需求,软件功能越来越多,那么其复杂程度越来越大. 因此,我们引入了更多层,从图中看,我们觉得好像这样比三层更加复杂,但是实现过程中我们会体现其高内聚,低耦合的优点.我们不难发现这是从三层加入设计模式演化而来,之所以采用抽象工厂模式是考虑到换数据库的方便,而应用外观模式是为了解决UI层和BLL层耦合