2015-01-18 2 views
0

Привет, У меня есть сценарий ниже - У меня есть таблица в моей БД, которая содержит зону Urls. С каждой зоной Url в коде я вызываю в зону Url, чтобы получить токен. Срок действия токена истекает через 30 минут, поэтому я не могу его сохранить в БД.Оператор switch со значением от DB

Так что я в настоящее время есть переключатель заявление, как показано ниже:

 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 и т.д. частные строки в пределах класса, которые установлены в другом переключателе заявлении аналогично выше, и затем получить для каждой зоны, используя заявление переключателя выше ,

У меня есть DAO, который получает все зоны из БД - как показано ниже:

var allZones = zoneDao.GetAllZones(); 

allZones будет содержать имя зоны, идентификатор зоны и URL зоны - есть в любом случае я могу использовать этого ZoneUrl из этого в моем случае, а не с строковыми значениями строковых значений?

Если я добавил класс Enum который содержит ZoneIds что-то вроде ниже:

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

Если я затем использовал Id от allZones и передал, что слишком переключатель заявление, как:

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

Что насчет Id зоны? –

+0

@ OlivierJacot-Descombes - вы можете развернуть с ответом на всех - ZoneId возвратил бы PK в таблице в DB - 1, 2,3 соответственно – TheRiddler

ответ

0

Это похоже, что ID зоны следует использовать как уникальный идентификатор (возможно, как ПЕРВИЧНЫЙ КЛЮЧ в соответствующей таблице). Поэтому это было бы логичным кандидатом для вашего оператора switch.

Такой идентификатор не должен содержать никакой другой информации, кроме указания и объекта или записи. Сохраняя его «нейтральным», вы гарантируете, что его не нужно будет менять, если в будущем будут изменены детали (например, 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(); 
+0

Привет, мне интересно, можете ли вы расширить свой ответ с помощью некоторого примера кода о том, как я woudl, например, вернет URL каждой зоны на основе ZoneID - было бы лучше всего, чтобы код ZoneID отображался в класс Enum? Many Thanks – TheRiddler

+0

Обновленный вопрос, с каким сценарием я думал – TheRiddler

Смежные вопросы