どのように抽象クラスを使用するには?抽象クラスのパワー

要約:

  今日、私は抽象クラス、抽象クラスと実際の電力を使用する方法についてお話したいと思います。これは私がいない長いビジネスに接触していますので、バーの罰金場合は、古いタイトルの下に見てください、抽象クラスを使用する方法を説明するために特定のビジネスを結合します。

ビジネスブリーフ:

  私は、同社の主な事業は、米国では賃貸事業で、現在PMS(プロパティマネジメントシステム)との唯一の接点です。米国と中国賃借人が賃借ので、ここでは記載していないバックグラウンドで異なるビットであってもよいです。ストレート件名に私たちをみましょう。

  ユーザーが家賃をクリックすると、我々は順序を作成する必要があり、注文が作成されたとき、あなたはオフトピックを避けるために、この記事の唯一の簡易版を多くのことを行う必要があります。オーダーを作成する場合は、次のことを行う必要があります。

    1.Availableチェック可用性が
    一致した滞在の最小値をチェック2.MinDay
    に/チェックインチェックアウト時間3.Checkをし、出発時刻の一致を確認します

    4.quote価格を計算。

  そして、最初の3のために、部屋の唯一の裁判官は借りることができます。そして、将来はおそらく、彼らは一緒に書いた場合拡大に資することも可能ですが、ではない、他のルールに参加します。ここで私は彼のスケーラビリティを実装する抽象クラスを使用する方法を見て:

 

  1.まず、以下のクラスを作成します

    1.1抽象クラスを作成OrderAddDTO.cs    

    パブリック クラスOrderAddDTO 
    { 
        ///  <まとめ> 
        /// プロパティID
         ///  </要約> 
        公共のGuid PropertyId { GETSETを;}
         ///  <まとめ> 
        /// チェック
         ///  </要約> 
        公衆 {CheckInDate日時GETSET ;}
         ///  <まとめ> 
        /// 出発時刻
         ///  </要約> 
        公共のDateTime CheckOutDate { GETSET ;} 


        // TODO:その他の情報
    }

     1.2抽象クラスを作成  PropertyValidAbstract.csを

    パブリック 抽象 クラスPropertyValidAbstract 
    { 
        保護PropertyValidAbstract _baseValidを。
        公共 ボイドSetNext(PropertyValidAbstract BaseValid)
        { 
            この ._baseValid = BaseValid。
        } 
        パブリック 静的 文字列 ERRORMSG { 得ますセット; }
         パブリック 抽象 ブールのIsValid(OrderAddDTO DTO)。
    }

 

       1.3利用可能なバリデーションクラスの作成:AvailableValidを、そしてから継承されたPropertyValidAbstract

    パブリック クラスAvailableValid:PropertyValidAbstract 
    { 
        公共 オーバーライド BOOL のIsValid(OrderAddDTO DTO)
        { 
            // TODO:利用可能のプロパティ(プロパティ)を取り外し


            // IF(計算プロパティには時間dto.CheckInDate-dto.CheckOutDateで利用可能です)
             // {
             // 次にERRORMSG割り当て、利用可能な、偽に戻るしない;
             // TODO:実施
             // } 


            // 真リターンを検証次何がある場合
            IFこの ._baseValid == NULLの
            { 
                返さない ; 
            } 

            / /利用可能な場合、次の確認を入力し
            戻す この._baseValid.IsValid(DTO)を; 

        } 
    }

 

      1.4 MinDayバリデーションクラスMinDayValid.csの作成、およびから継承PropertyValidAbstract

    パブリック クラスMinDayValid:PropertyValidAbstract 
    { 
        パブリック オーバーライド BOOL のIsValid(OrderAddDTO DTO)
        { 
            // TODO:MinDayルールのプロパティ(プロパティ)を取り外し


            // アナログmindayルールをこれ以上複雑な特定minday 
            するvar checkDays =(dto.CheckOutDate - dto.CheckInDate).Days + 1 ;
             IF(checkDays < 3 
            { 
                ERRORMSGは = "3日、少なくともステイ" ;
                 戻り falseに; 
            } 

            // 真何がある場合は、次の戻りを確認しない
            IFこの ._baseValid == NULL 
            { 
                戻り trueに; 
            } 

            // もしそうであれば、検証を入力すると、次
            戻り 、この; ._baseValid.IsValid(DTO)を
        } 
    }

 

 

      1.5チェックイン/チェックアウトバリデーションクラスの作成:CheckInOutDateValid.csを、そしてから継承されたPropertyValidAbstract

    パブリック クラスCheckInOutDateValid:PropertyValidAbstract 
    { 
        公共 オーバーライド ブールのIsValid(OrderAddDTO DTO)
        { 

            // 模拟チェックイン/チェックアウト规则判断 
            のDayOfWeek checkInWeek = dto.CheckInDate.DayOfWeek。
            DayOfWeek checkOutWeek = dto.CheckOutDate.DayOfWeek。
            もし(!checkOutWeek = DayOfWeek.Saturday || checkInWeek =!DayOfWeek.Tuesdayは)
            { 
                ERRORMSG = " チェックイン/アウトは満たしていません" 返す ; 
            }
            // ないがあれば、次の真の戻りを確認
            IFこの ._baseValid == NULL 
            { 
                戻り ; 
            } 
            戻り 、この; ._baseValid.IsValid(DTO)を
        } 
    }

 

      ValidSettings.csを、そしてから継承さ:1.6最後に、検証の設定クラスを作成PropertyValidAbstract

    パブリック クラスValidSettings:PropertyValidAbstract 
    { 公共 オーバーライド ブールのIsValid(OrderAddDTO DTO)
        { 
            // 先进行AvailableValid 
           PropertyValidAbstract BaseValid = 新しいAvailableValid()。
            // 在验证MinDayValid 
            VAR mindayvalid = 新しいMinDayValid(); 
            BaseValid.SetNext(mindayvalid)。
            // 最后是CheckInOutDateValid 
            VAR checkinOutvalid = 新しいCheckInOutDateValid(); 
            mindayvalid.SetNext(checkinOutvalid)。

            リターン BaseValid.IsValid(DTO)を、
        } 
    }

 

 

  コンソールのシミュレーションでは2:

        静的 ボイドメイン(文字列[]引数)
        { 
            /// このDTOは、これのアナログ、クライアントから渡される 
            OrderAddDTO DTO = 新しい新しいOrderAddDTOを(); 
            dto.CheckInDateは = DateTime.Now; 
            dto.CheckOutDateは日時を=。 Now.AddDays(1 ); 


            PropertyValidAbstract baseValidは = 新しい新しいValidSettings(); 

            IF(baseValid.IsValid(DTO)== falseに
            { 
                Console.WriteLineを(PropertyValidAbstract.ErrorMsg); 
            } 
            
            { 
                //TODO:価格計算
                Console.WriteLineを( "価格を計算");
} Console.ReadKey(); }

 

  3.実行結果:

    3.1 mindayルールは、テストを満たしていません

    

 

 

 

 

     3.2テストが満たされています

    

 

 

 

  営業結果は全く問題、今回の顧客は、あなたが私をmaxday(日滞在ルールの最大数)を追加与えることを要求しないかもしれません。この時点で、私たちはこれを行うことができます:

    MaxDayValid.csを、そしてから継承されます。1.新しいmaxday検証クラスを作成しますPropertyValidAbstract

    パブリック クラスMaxDayValid:PropertyValidAbstract 
    { 
        公共 オーバーライド BOOL のIsValid(OrderAddDTO DTO)
        { 
            // TODO:MaxDayルールの性質(プロパティ)を取り外し


            // これより特定maxdayより複雑なアナログmaxdayルール
            するvar =(dto.CheckOutDate checkDays - dto.CheckInDate).Days + 1 ;
             IF(checkDays> 300 
            { 
                ERRORMSGは = " 300日まで滞在" ;
                 戻り falseに; 
            } 

            // がNOであれば、次の検証、真を返す
            IFこの ._baseValid == NULL 
            { 
                戻り 
            } 
            戻り 、この._baseValid.IsValid(DTO)を、
        } 
    }

    2.クラスValidSettings.csを変更

    パブリック クラスValidSettings:PropertyValidAbstract 
    { 

        公共 オーバーライド ブールのIsValid(OrderAddDTO DTO)
        { 
            // 先进行AvailableValid 
            PropertyValidAbstract BaseValid = 新しいAvailableValid()。
            // 在验证MinDayValid 
            VAR mindayvalid = 新しいMinDayValid(); 
            BaseValid.SetNext(mindayvalid)。



            // 新增一个maxday 
            VAR maxdayvalid = 新しいMaxDayValid(); 
            mindayvalid.SetNext(maxdayvalid)。

            // 最后是CheckInOutDateValid 
            VAR checkinOutvalid =新しいCheckInOutDateValid(); 
            maxdayvalid.SetNext(checkinOutvalid)。

            返すBaseValid.IsValid(DTO)を、
        } 
    }

 

 

 

    3.私たちは、結果を見て:

  

 

 

結論:

  私はそれが責任のJiaoshaチェーンのようです、それは実際に上記で使用されるデザインパターンの抽象クラスの例の一例である、私の記事はあなたを助けることができると思います。私は非常にはっきりと覚えています。デザインパターンは、死者を覚えていないことについて、私たちは「自分の形を忘れて、意味を得ることができる。」行っています 見ていただきありがとうございます。

 

おすすめ

転載: www.cnblogs.com/norain/p/11441869.html