私は次のことにアプローチするための最良の方法を見つけようとしています..
型を渡す必要がありAvailabilityOption/LimitedAvailabilityOption
ます-それが起こったときにサービスをよくしてから、型を取り戻しBookingOption
ます。
可用性タイプを生成するルーチンがありますが、各オブジェクトを効果的に複製して、それらのバージョンを継承する必要があるかどうかがわかりませOption
ん。または、可用性クラスを使用して単純なオプションのある種の「装飾」を実行し、それらを再度渡すときに予約オプションにキャストすることはできますか。デコレーションパターンがあることは知っていますが、これについて少し読んでみると、実行時のデコレーションに関するもののようです。誤解されているかもしれません。私はこれをあまりよく説明していないと思いますが、ここにいくつかのコードがあります。BookingOption
AvailabilityOption
編集:事実上、オプションは予約で可能ないくつかのオプションのベースです-エクスカーションやその他の追加のオプションなど、かなりの数があります。可用性はそれを拡張して、任意のオプションにあるスペースを決定しますが、価格と、場合によってはそのオプションですでに予約されている数を使用して、オプション自体を拡張するだけです。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...
}