相比于第一遍根据流程图写的上机流程,这一版利用职责链模式,将上机过程中的不同职责进行了封装,耦合度更低。符合了面向对象的设计原则:
这次,我把职责链放在了B层
设置上下级OpenHandler类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Entity;
namespace BLL.上机
{
/// <summary>
/// 上机抽象类
/// </summary>
public abstract class OpenHandler
{
//定义保护名称
protected OpenHandler successor;
//设置上下级
public void SetSuccessor(OpenHandler successor)
{
this.successor = successor;
}
//定义返回字符串类型的抽象方法
public abstract string HandleRequest(HanlderEntity online);
}
}
判断是否上机职责OpenLine类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Entity;
namespace BLL.上机
{
public class OpenLine : OpenHandler
{
public override string HandleRequest(HanlderEntity online)
{
//实例化判断类
BLL.OO.JudgeBLL judge = new BLL.OO.JudgeBLL();
//定义空字符串
string message = " ";
//判断是否正在上机
bool i = judge.SelectLine(online);
if (i == false)
{
message = "此卡号正在上机";
}
else
{
message = successor.HandleRequest(online);
}
return message;
}
}
}
判断余额职责OpenCash类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BLL;
using Entity;
namespace BLL.上机
{
public class OpenCash : OpenHandler
{
public override string HandleRequest(HanlderEntity online)
{
//实例化判断类
BLL.OO.JudgeBLL judgeBLL = new BLL.OO.JudgeBLL();
bool falg = judgeBLL.SelectLineCash(online);
string message = "";
if (falg == false)
{
message = "余额不足,请充值";
}
else
{
message = successor.HandleRequest(online);
}
return message;
}
}
}
插入上机信息职责OpenInsert类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Entity;
namespace BLL.上机
{
public class OpenInsert : OpenCash
{
//OnLineEntity onLineEntity = new OnLineEntity();
public override string HandleRequest(HanlderEntity online)
{
//查询用户基本信息
dynamic[] vs = OO.SelectBLL.SelectUsersInfo(online);
//将用户类型插入上机表和上机记录表
//onLineEntity.CardNo = Convert.ToString(online);
online.Level = vs[2];
//onLineEntity.OperatorId = 0;
//实例化插入类
BLL.OO.InsertBLL insertBLL = new BLL.OO.InsertBLL();
//插入正在上机表
insertBLL.InsertLine(online);
//插入上机记录表
insertBLL.InsertOnline(online);
string message = "上机成功";
return message;
}
}
}
在上机的过程中,还用到了外观模式,在另一篇博客中有讲解。
上机UI层代码请看博客添加链接描述