【機械室再構築】——下機(戦略モード+職責チェーンモード)


【前言】
ダウンタイム機能は機械室全体の料金徴収システムにおいても難点でしょう.ダウンタイムの過程で関わる表が多く、異なる料金徴収標識があるからです.これらのポイントに対して、私はそれぞれ職責チェーンモデルを採用して区分課金を実現し、戦略モデルは異なるユーザーの課金基準を実現した.次は私が一緒に来るのを見てください.
 
【内容】
一、戦略モードとは何か
 
ポリシーモードは一連のアルゴリズムを定義する方法であり、概念的に見ると、これらのアルゴリズムはすべて同じ仕事を完成するが、実現が異なり、彼は同じ方法ですべてのアルゴリズムを呼び出し、各種のアルゴリズムクラスと使用アルゴリズムとの結合を減らすことができる.
ポリシーモードの詳細については、こちらをクリックしてください
 
二、職責チェーンモデルとは何か
 
複数のオブジェクトが要求を処理する機会を与え、要求の送信者と受信者との結合関係を回避し、そのオブジェクトをチェーンに接続し、このチェーンに沿って要求を1つのオブジェクトが処理するまで伝達する.
職責チェーンモードの詳細:ここをクリックしてください
 
三、具体的な実現B
BLL層
#region     
    public abstract class Spend
    {
        public abstract string acceptCash(Entity.DownLine downLine);
    }
    

    //        
    public class FixedUser : Spend
    {

        public override string acceptCash(Entity.DownLine downLine)
        {
            #region            
            //      
            TimeSpan ontime1 = Convert.ToDateTime(DateTime.Now.ToString())- Convert.ToDateTime(downLine.OnTime);

            //    
            //double ontime2 = Convert.ToDouble(ontime1.TotalHours);
            //int time = Convert.ToInt32(ontime2 + 1);
            //downLine.SpendTime = Convert.ToString(time);
            //      
            downLine.SpendMoney = Convert.ToString(Convert.ToInt32(downLine.SpendTime) * Convert.ToInt32(downLine.Rate));
            return Convert.ToString(downLine);
            #endregion

        }
    }
    //        
    public class SuperUser : Spend
    {
        public override string acceptCash(Entity.DownLine downLine)
        {
            #region       
            //      
            //TimeSpan ontime1 = Convert.ToDateTime(DateTime.Now.ToString()) - Convert.ToDateTime(downLine.OnTime);
            ////    
            //double ontime2 = Convert.ToDouble(ontime1.TotalHours);

            //downLine.SpendTime = Convert.ToString(ontime2 + 1);
            
            downLine.SpendMoney = Convert.ToString(Convert.ToInt32(downLine.SpendTime) * Convert.ToInt32(downLine.TmpRate));
            return Convert.ToString(downLine);
            #endregion
        }
    }
    //         
    public abstract class OperateMoneyManager
    {
        protected OperateMoneyManager successor;
        //     
        public void SetSuccessor(OperateMoneyManager successor)
        {
            this.successor = successor;
        }
        //         
        public FixedUser FixedUser = new FixedUser();
        public SuperUser SuperUser = new SuperUser();

        public abstract void GetMoney(Entity.DownLine downLine);
    }
    //    
    public class OperateMoneyOne : OperateMoneyManager
    {
        public override void GetMoney(Entity.DownLine downLine)
        {
            //           ,   
            if (Convert.ToDouble(downLine.SpendTime) <= Convert.ToDouble(downLine.PrepareTime))
            {
                downLine.SpendTime = Convert.ToString(0);
                downLine.SpendMoney = Convert.ToString(0);
            }
            else
            {
                successor.GetMoney( downLine);
            }
        }
    }
    public class OperateMoneyTwo : OperateMoneyManager
    {
        public override void GetMoney(Entity.DownLine downLine)
        {
            if (Convert.ToDouble(downLine.SpendTime) > (Convert.ToDouble(downLine.PrepareTime) / 60))
            {
                if (downLine.Type == "    ")
                {
                    FixedUser.acceptCash(downLine);//      
                }
                else
                {
                    SuperUser.acceptCash(downLine);
                }
            }
            else
            {
                successor.GetMoney(downLine);
            }
        }
    }
    #endregion

Facadeレイヤ
public void  Money(Entity.DownLine downLine)
        {
            //       
            BLL.OperateMoneyManager one = new BLL.OperateMoneyOne();
            BLL.OperateMoneyManager two = new BLL.OperateMoneyTwo();
           
            //          
            one.SetSuccessor(two);
            //      B 
            one.GetMoney(downLine);
          
           
        }

UI層
 
 {
                //        
                Entity.DownLine downLine = new Entity.DownLine();
                Facade.DownLineFacade down = new Facade.DownLineFacade();
                downLine.CardNO = Convert.ToInt32( txtCardNO.Text.Trim());
                DataTable flag = down.FindOnLine(downLine);
                if (flag.Rows .Count ==0)
                {
                    MessageBox.Show("      ","    ",0,MessageBoxIcon.Warning);
                }
                else
                {

                    downLine.OnTime = flag.Rows[0][1].ToString();
                    downLine.Type = flag.Rows[0][2].ToString();
                    
                    downLine.Money = flag.Rows[0][3].ToString();
                    

                    DataTable flags = down.FindBasicdata(downLine);
                    if (flags .Rows.Count !=0)
                    {
                        //basicdata   
                        downLine.Rate =flags.Rows[0][0].ToString();
                        downLine.TmpRate = flags.Rows[0][1].ToString();
                        downLine.UnitTime = flags.Rows[0][2].ToString();
                        downLine.PrepareTime= flags.Rows[0][3].ToString();
                        downLine.LimitMoney =flags.Rows[0][4].ToString();
                        TimeSpan ontime1 = Convert.ToDateTime(DateTime.Now.ToString()) - Convert.ToDateTime(downLine.OnTime);

                        //    
                        double ontime2 = Convert.ToDouble(ontime1.TotalHours);
                        int time = Convert.ToInt32(ontime2 + 1);
                        downLine.SpendTime = Convert.ToString(time);
                        //    
                        Facade.DownLineFacade downs=new Facade.DownLineFacade();
                        downs.Money(downLine);

                        //  mation  
                        downLine.Money = Convert.ToString( Convert.ToInt32(downLine.Money) - Convert.ToInt32(downLine.SpendMoney));
                        bool flagss = down.UpdataMation(downLine);
                        if (flagss==true)
                        {
                            //       
                            bool delete = down.DeleteOnLine(downLine);
                            if (delete==true)
                            {
                                //    
                                downLine.OnTime=flag.Rows[0][1].ToString();
                                downLine.DownTime= DateTime.Now.ToString();
                                downLine.Computer = flag.Rows[0][4].ToString();
                                downLine.UserName = UserName;
                                bool insert = down.InsertDownLine(downLine);
                                if (insert==true)
                                {
                                    txtMoney.Text = downLine.Money;
                                    MessageBox.Show("    ", "    ", 0, MessageBoxIcon.Information);
                                    
                                }

                            }
                        }

                    }
                }
               

            }
            catch (Exception)
            {

                throw;
            }

 
【まとめ】
 
コードにはまだ一定の冗長性があり、その間に多くのブログを見たり、多くの人に教えてもらったりしました.あなたの役に立つことを望みます