2012-07-19 37 views
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... 
} 
+0

能否請您提供有關「可用性」和「選項」概念,以及關於它們之間的關係本質上多一點信息 - 在你的應用程序的業務邏輯?這似乎是答案取決於這些類和他們背後的概念的目的。 – 2012-07-19 09:33:06

+0

@ Andrii修正..希望進一步解釋 – nat 2012-07-19 09:55:50

回答

0

它看起來像答案取決於你打算如何使用可用性有限公司availabilitty香精品質。如果那些可用性 -qualities僅適用於LimitedAvailabilityOptionAvailabilityOption類 - 看起來好像需要在不同的類中實現AvailabilityLimitedAvailability,因爲這些類中的每一個將僅用於區分其中一種類型本質(分別爲LimitedAvailabilityOptionAvailabilityOption)。這將是有意義的使用裝飾圖案和執行類可用性數量有限只有素質,如果你打算它們分配給未與繼承關係(包括通過中間類繼承)連接的多個香精。如果你打算傳播可用性使用多個類 -qualities是不應該有通過具有可用性財產的共同祖先繼承任何連接 - 那麼唯一的選擇就是提取那些可用性素質成單獨的類。