您好我有以下情况 - 我的数据库中有一个包含区域网址的表格。对于代码中的每个区域Url,我都会调用Url区域来获取令牌。令牌在30分钟后到期,因此我无法将其存储在数据库中。
所以我目前有一个如下所示的开关语句:
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 - 无论如何我可以在我的case语句中使用这个ZoneUrl而不是字符串值是硬编码的吗?
如果我添加了一个Enum类,其中包含如下所示的ZoneIds:
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
}
答案 0 :(得分:0)
似乎区域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();