相比于第一遍根据流程图写的上机流程,这一版利用职责链模式,将上机过程中的不同职责进行了封装,耦合度更低。符合了面向对象的设计原则:
这次,我把职责链放在了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层代码请看博客添加链接描述