机房重构---下机(策略模式和职责连模式)

2024-03-27 01:38

本文主要是介绍机房重构---下机(策略模式和职责连模式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

下机需要查看消费时间以及选择用户类型,因此这里用到了职责连模式以及策略模式两种模式。消费时间用的是职责连模式,选择用户类型(固定用户,临时用户)。涉及多个表的查询,用视图是个不错的选择。

内容:


一、各个层调用关系:


二、UI层代码:

 Private Sub btnOffLine_Click(sender As Object, e As EventArgs) Handles btnOffLine.Click'1、卡号是否存在 2、卡号是否上机,上机记录表 '3、计算消费金额:1、小于( 最少上机时间和准备时间)2、大于( 最少上机时间和准备时间)小于递增时间 (临时和固定)'4、更新上机记录表,卡表If txtCardNo.Text = "" ThenMsgBox("请输入卡号")ReturnEnd IfDim table1 As New DataTableDim Card As New Entity.EntityCardDim line As New Entity.LineLogEntityDim facade As New Facade.OffLineFacadeDim table2 As New DataTableDim basic As New Entity.EntityBasicDataSetCard.CardNo = txtCardNo.Text()'查询卡表获取卡类型等table1 = facade.selectOffF(Card)'查询基础数据表table2 = facade.selectBasicF(basic)Card.type = table1.Rows(0).Item(3)Card.Balance = table1.Rows(0).Item(2)line.OnDate = table1.Rows(0).Item(1)line.OffDate = Format(Now, "yyyy-MM-dd HH:mm:ss")basic.LeastTime = table2.Rows(0).Item(5)basic.UnitTime = table2.Rows(0).Item(4)basic.ReadyTime = table2.Rows(0).Item(6)basic.tmpRate = table2.Rows(0).Item(3)basic.Rate = table2.Rows(0).Item(2)Dim facade2 As New Facade.CashContext'计算消费时间line.mins = facade.ConsumeTimeF(basic, Card, line)'选择卡类型line.Cash = facade2.SelectType(basic, Card, line)Card.Balance = CDec(Card.Balance) - CDec(line.Cash)line.CardNo = Card.CardNoDim flag As Booleanflag = facade.offLine(line, Card)If flag = True ThenMsgBox("下机成功")txtCardNo.Text = line.CardNotxtBalance.Text = Card.BalancetxtType.Text = Card.typetxtStudentNo.Text = table1.Rows(0).Item(5)txtStudentName.Text = table1.Rows(0).Item(6)txtDepartment.Text = table1.Rows(0).Item(8)txtSex.Text = table1.Rows(0).Item(7)txtOnDate.Text = line.OnDatetxtOffDate.Text = line.OffDatetxtmins.Text = line.minstxtCash.Text = line.CashElseMsgBox("下机失败")End IfEnd Sub

三、外观层

1、职责连查看消费时间

    Public Function ConsumeTimeF(ByVal basic As Entity.EntityBasicDataSet, ByVal card As Entity.EntityCard, ByVal line As Entity.LineLogEntity) As IntegerDim preparetime As New BLL.PrepareTimeBLL(basic)Dim leasttime As New BLL.LeastTimeBLL(basic)Dim unittime As New BLL.UintTimeBLLpreparetime.setsuccessor(leasttime)leasttime.setsuccessor(unittime)Dim time As Integertime = DateDiff("n", line.OnDate, line.OffDate)Return preparetime.TimeRequest(time)End Function

2、策略模式选择卡类型

Public Class CashContextDim cashsuper As CashSuper'根据策略 不同,采用不同的计费方式Public Function SelectType(ByVal basic As Entity.EntityBasicDataSet, ByVal card As Entity.EntityCard, ByVal line As Entity.LineLogEntity) As SingleSelect Case card.type.Trim()Case "固定用户"cashsuper = New FixedUserBLL() '实例化固定用户策略Case "临时用户"cashsuper = New TmpUserBLL()End SelectReturn cashsuper.GetConsumMoney(basic, card, line)End Function


四、BLL层

1、职责连查看消费时间

(1)时间基类

Public MustInherit Class TimeBLLProperty successor As TimeBLLPublic Sub setsuccessor(ByVal successor As TimeBLL) '设置继承类Me.successor = successorEnd Sub'请求处理的抽象方法Public MustOverride Function TimeRequest(ByVal time As Integer) As IntegerEnd Class
(2)LeastTimeBLL类

Public Class LeastTimeBLL : Inherits TimeBLLProtected leastTime As IntegerPublic Sub New(ByVal basic As Entity.EntityBasicDataSet)Me.leastTime = CInt(basic.LeastTime) '将至少上机时间赋值为leastTimeEnd SubPublic Overrides Function TimeRequest(time As Integer) As IntegerIf time <= leastTime Then '如果上机时间小于至少上机时间,返回至少上机时间  Return leastTimeElseReturn successor.TimeRequest(time)End IfEnd Function
End Class
(3)PreparetimeBLL类 
Public Class PrepareTimeBLL : Inherits TimeBLLDim preparetime As Integer' Public Sub New是VB.net默认的构造函数  form_load是Form类在调用New构造函数后加载窗体绘图后才调用的方法 Public Sub New(ByVal basic As Entity.EntityBasicDataSet)Me.preparetime = CInt(basic.ReadyTime)  '传入准备时间End SubPublic Overrides Function TimeRequest(time As Integer) As IntegerIf time <= preparetime Then '如果上机时间小于准备时间,返回0Return 0ElseReturn successor.TimeRequest(time)End IfEnd Function
End Class

(4)Unittime类

Public Class UintTimeBLL : Inherits TimeBLL'正常消费Public Overrides Function TimeRequest(time As Integer) As IntegerReturn timeEnd Function
End Class

2、策略模式选择卡类型:

(1)固定用户

Public Class FixedUserBLL : Inherits CashSuper'固定用户Dim fixedRate As SinglePublic Overrides Function GetConsumMoney(ByVal basic As Entity.EntityBasicDataSet, ByVal card As Entity.EntityCard, ByVal line As Entity.LineLogEntity) As SinglefixedRate = Trim(Int(basic.Rate))Dim consumMoney As SingleconsumMoney = Trim(CSng(fixedRate) * CSng(line.mins * 1.0 / 60.0))If consumMoney < Trim(Int(basic.Rate)) ThenconsumMoney = Int(basic.Rate)End IfReturn consumMoneyEnd Function
End Class
(2)临时用户

Public Class TmpUserBLL : Inherits CashSuper  '临时用户Dim TmpRate As SinglePublic Overrides Function GetConsumMoney(basic As Entity.EntityBasicDataSet, card As Entity.EntityCard, line As Entity.LineLogEntity) As SingleTmpRate = basic.tmpRateDim consumMoney As SingleconsumMoney = Trim(CSng(TmpRate) * CSng(line.mins * 1.0 / 60.0))If consumMoney < Int(basic.tmpRate) ThenconsumMoney = Int(basic.tmpRate)End IfReturn consumMoneyEnd Function
End Class

五、DAL层

Public Class AdcountDAL : Implements IDAL.IAdcountPublic Function update(adcount As EntityAdCount) As Integer Implements IAdcount.updateDim sql As StringDim sqlhelper As New SQLHelper.sqlhelperDim flag As IntegerDim paras As SqlParameter() = {New SqlParameter("@UserID", adcount.UserID),New SqlParameter("@CancelCash", adcount.CancelCash),New SqlParameter("@CheckCash", adcount.CheckCash),New SqlParameter("@RechCash", adcount.RechCash),New SqlParameter("@Checkdate", adcount.Checkdate)}sql = "proc_Account"flag = sqlhelper.ExecAddDelUpdate(sql, CommandType.StoredProcedure, paras)Return flagEnd Function
End Class
存储过程:

ALTER PROCEDURE [dbo].[pro_Offline]@CardNO varchar(20),@OffDate datetime,@mins    int,@Cash    numeric(10, 2),@state  varchar(20),@Balance numeric(10, 2)
AS
BEGINupdate Y_LineLog_Info set OffDate=@OffDate  ,mins =@mins  ,Cash=@Cash ,state=@state where CardNo =@CardNO  update Y_Card_Info set Balance=Balance  where CardNo =@CardNO  END

总结:

下机用到了两个设计模式,其实设计到哪部分特别复杂就该考虑用设计模式去解耦合,设计模式还需要我们继续去研究。

这篇关于机房重构---下机(策略模式和职责连模式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/850536

相关文章

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例