1

私は次のことにアプローチするための最良の方法を見つけようとしています..

型を渡す必要がありAvailabilityOption/LimitedAvailabilityOptionます-それが起こったときにサービスをよくしてから、型を取り戻しBookingOption ます。

可用性タイプを生成するルーチンがありますが、各オブジェクトを効果的に複製して、それらのバージョンを継承する必要があるかどうかがわかりませOptionん。または、可用性クラスを使用して単純なオプションのある種の「装飾」を実行し、それらを再度渡すときに予約オプションにキャストすることはできますか。デコレーションパターンがあることは知っていますが、これについて少し読んでみると、実行時のデコレーションに関するもののようです。誤解されているかもしれません。私はこれをあまりよく説明していないと思いますが、ここにいくつかのコードがあります。BookingOptionAvailabilityOption

編集事実上、オプションは予約で可能ないくつかのオプションのベースです-エクスカーションやその他の追加のオプションなど、かなりの数があります。可用性はそれを拡張して、任意のオプションにあるスペースを決定しますが、価格と、場合によってはそのオプションですでに予約されている数を使用して、オプション自体を拡張するだけです。BookingOption価格と入手可能性に基づいてオプションから効果的に選択するルーチンから返されるものがあります。私は予約ポイントで最低限を返そうとしています。これは実際にはオプションが必要な日付であり、それがどのオプションであるかです。この時点での可用性は重要ではありません。

public abstract class Option{
    public int OptionID { get; set; }
    public OptionType OptionType { get; set; }
    public string EqtCode { get; set; }
    public string CentreCode { get; set; }
    public virtual string Description { get; set; }     
}

public abstract BookingOption : Option{
    public DateTime WeekStartDate{get;set;}
}

public abstract class AvailabilityOption : BookingOption {
    public decimal Price{get;set;}

    public override string Description{
        get{return string.format("{0} @ {1}", base.Description, Price.ToString());
        set{ base.Description = value;}
    }
}

public abstract class LimitedAvailabilityOption : AvailabilityOption{
    public int MinNumber { get; set; }
    public int MaxNumber { get; set; }
    public int TotalBooked { get; set; }
    public int TotalRemaining { get; set; }
    public override string Description
    {
        get
        {
            return string.Format("{0} ({1} @ {2})",
                base.Description, TotalRemaining.ToString(), Price.ToString());
        }
        set { base.Description = value;}
    }
}

public class Option1 : Option{
    public Option1(){}
}

public class Option2 : Option{
    public Option2(){}
}

public List<BookingOption> BookWithAvail(List<AvailabiliyOption> options){
//pick options based on avail and pass back the booking versions so write away...
}
4

1 に答える 1

0

答えは、エッセンスの可用性と限られた可用性の品質をどのよう使用するかによって異なるようです。それらの可用性-品質がクラスにのみ適用可能である場合LimitedAvailabilityOption-それらのクラスのそれぞれが他の1種類のエッセンス(およびそれぞれ)のみを区別するために使用されるため、実装または個別のクラスAvailabilityOptionでの大きな必要性はないようです。デコレーションパターンを使用し、可用性限定可用性のクラスを実装することは理にかなっていますAvailabilityLimitedAvailabilityLimitedAvailabilityOptionAvailabilityOption継承関係(中間クラスを介した継承を含む)に関連していない複数のエッセンスにそれぞれを割り当てることを計画している場合にのみ、品質。また、可用性(可用性プロパティを持つ共通の祖先を介して継承接続を持たない複数のクラスに可用性品質)の使用を分散することを計画している場合、唯一の選択肢は、それらの可用性品質を別々のクラスに抽出することです。

于 2012-07-19T11:05:39.983 に答える