服务层中特定于实现的常量

本文关键字:实现 常量 于实现 服务 | 更新日期: 2023-09-27 18:05:26

我有一个ASP.Net Web Forms项目,它是作为CRM Web服务的用户界面构建的。

我有一个接口IMembershipService,它公开了许多用于购买服务的不同类型订阅的方法。SpecificMemberService的具体实现将抽象出许多对第三方CRM系统的web服务调用。

具体实现要求将不同的"订阅级别"作为特定的4个字符的字符串代码传递给它。目前,我在我的服务层中定义了以下内容:

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

然而,这些代码是特定于具体类SpecificMemberService的,因此不应该像目前这样真正独立于它。如何向web应用程序公开强类型MemberType代码,这些代码对于IMembershipService具体实现是常量?

服务层中特定于实现的常量

创建MemberType推断面。将GetMemberTypes方法添加到您的服务接口,该接口公开IMemberType的集合。

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);
    }
}

将"专业"显示为常量或枚举以获得奖励积分。