2013-03-21 28 views
1

我有一個ASP.Net Web窗體項目,它構建爲(除其他之外)CRM Web服務的用戶界面。服務層中的特定於實現的常量

我有一個接口IMembershipService,它提供了許多方法來購買服務的不同種類的訂閱。這個的具體實現SpecificMemberService將抽象一些Web服務調用到第三方CRM系統。

具體實現要求將不同的「訂閱級別」作爲特定的4字符字符串代碼傳遞給它。目前,我已經定義我的服務層以下:

public static class MemberTypes 
{ 
    public const string Basic = "MEM1"; 
    public const string Extra = "MEM2"; 
    public const string Professional = "MEM3"; 
} 

然而,這些代碼是特定於具體的類SpecificMemberService和 - 這樣 - 真的不應該是獨立的,就像它們現在是。我該如何向我的web應用程序暴露強類型的MemberType代碼,這些代碼相對於的具體實現是恆定的?

+0

我不清楚你的系統和後端系統是否具有相同或不同的_concept_成員類型?我的意思是你是否期望其他具體成員服務對於成員類型會有不同的代碼,甚至會有不同數量的成員類型,甚至是成員類型的複雜描述符(例如多維)? – Vizu 2013-03-21 22:21:29

回答

2

創建一個MemberType接口。將GetMemberTypes方法添加到您的服務接口中,該接口公開IMemberType的Collection。

public interface IMemberType {  
    public string Name { get; set; } // i.e. "Professional" 
    public string Code { get; set; } // i.e. "MEM3" 
} 

public void ClientCode() { 

    // Instantiate a concrete service (calling a factory would be even better). 
    IMembershipService service = new MembershipService(); 

    // Get the list of MemberTypes exposed by the concrete MembershipService. 
    Collecton<IMemberTypes> types = service.GetMemberTypes(); 

    // Subscribe to service defined in IMembershipService with "Professional" level, if possible. 
    foreach (IMemeberType type in types) { 
     if ((type.Name == "Professional")) 
      service.SubscribeToAwesomeService(type.Code); 
    } 
} 

暴露「專業」作爲常數或獎金積分的枚舉。