【问题标题】:Implementation-specific constants in service layer服务层中特定于实现的常量
【发布时间】:2013-03-22 10:10:55
【问题描述】:

我有一个 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 并且 - 因此 - 不应该像目前那样真正独立于它。如何将强类型的MemberType 代码公开给我的Web 应用程序,这些代码对于IMembershipService具体实现 是恒定的?

【问题讨论】:

  • 我不清楚你的系统和后端系统的成员类型的概念是相同还是不同?我的意思是您是否希望其他具体的成员服务具有不同的成员类型代码,甚至不同数量的成员类型,甚至是更复杂的成员类型描述符(例如,具有多个维度?)

标签: c# asp.net architecture interface


【解决方案1】:

创建一个 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);
    }
}

将“专业”公开为常量或枚举以获得奖励积分。

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多