【问题标题】:Switch statement with value from DB带有来自 DB 的值的 switch 语句
【发布时间】:2015-01-19 23:44:00
【问题描述】:

您好,我有以下情况 - 我的数据库中有一个包含区域 URL 的表。对于代码中的每个区域 URL,我都会调用区域 URL 以获取令牌。令牌在 30 分钟后过期,因此我无法将其存储在数据库中。

所以我目前有一个如下的 switch 语句:

        switch (zone)
        {
            case "https://dummy.url.zone1":
                 return _zoneOneToken;
            case "https://dummy.url.zone2":
                return _zoneTwoToken;
            case "https://dummy.url.zone3":
                return _zoneThreeToken;
            default:
                const string errorMessage = "Zone not found";
                Logger.Error(errorMessage);
                throw new ApplicationException(errorMessage);
        }

_zoneOneToken 等是类中的私有字符串,它们在另一个类似于上面的 switch 语句中设置,然后使用上面的 switch 语句获取每个区域。

我有一个从数据库获取所有区域的 DAO - 如下:

var allZones = zoneDao.GetAllZones();

allZones 然后将包含区域名称、区域 ID 和区域 URL - 无论如何我可以在我的案例语句中使用这个 ZoneUrl,而不是硬编码字符串值?

如果我添加了一个包含 ZoneIds 的 Enum 类,如下所示:

public enum ZoneEnum
{
    None = 0,
    ZoneOne = 1,
    ZoneTwo = 2,
    ZoneThree = 3
}

如果我随后使用来自 allZones 的 Id 并将其也传递给 switch 语句:

switch (zoneId)
{
    case ZoneEnum.ZoneOne :
     // how would I get zoneOne Url here?
     //removed rest of code for this for brevity
}

【问题讨论】:

  • @OlivierJacot-Descombes - 你能用答案扩展吗 - 返回的 ZoneId 将是 DB 中表上的 PK - 分别为 1、2,3

标签: c# .net switch-statement


【解决方案1】:

似乎 Zone ID 应该用作唯一 ID(可能作为相应表中的 PRIMARY KEY)。因此,这将是您的 switch 语句的合乎逻辑的候选者。

这样的 ID 不应包含除识别和对象或记录之外的任何其他信息。通过保持它“中立”,您可以确保它不会被更改,如果细节(如 URL)将来发生变化。


你可以上课Zone:

public class Zone
{
    public string Name { get;set; }
    public ZoneEnum Id { get; set; }
    public string URL { get; set; }

    public ZoneToken CreateToken()
    {
        ...
    }
}

如果将所有区域都放在Dictionary<ZoneEnum, Zone> 中,则可以获得这样的令牌

Zone zone = zonesDict[ZoneEnum.ZoneTwo];
ZoneToken token = zone.CreateToken();

【讨论】:

  • 嗨,我想知道您能否用一些示例代码扩展您的答案,例如我将如何根据 ZoneID 返回每个区域 url - 最好在代码中将 ZoneID 映射到枚举班级?非常感谢
  • 更新了我在想什么场景的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多