我正在尝试找出解决以下问题的最佳方法..
我需要将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...
}