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

看起来答案取决于您计划如何使用精华的可用性有限可用性品质。如果这些可用性-质量仅适用于LimitedAvailabilityOptionAvailabilityOption类-那么似乎不需要实现AvailabilityLimitedAvailability在单独的类中,因为这些类中的每一个都将仅用于区分一种其他本质(LimitedAvailabilityOptionAvailabilityOption分别)。使用装饰模式并为可用性有限可用性实现类是有意义的仅当您计划将它们中的每一个分配给与继承关系无关的多个本质时(包括通过中间类继承)。而且,如果您计划通过具有可用性属性的共同祖先将可用性质量分布到多个不应该具有任何继承连接的类中,那么唯一的选择是将这些可用性质量提取到单独的类中。

于 2012-07-19T11:05:39.983 回答