2014-10-29 3 views
0

С использованием статических классов (и константных строк) Я хочу, чтобы иметь возможность получить постоянные значения, как это:Константы в статических классов

var value = Constants.Labels.Controls.TopNavigation.Save; 

Я создал эту структуру для этой проблемы:

public static class Constants 
{ 
    public static class Labels 
    { 
     public static class Controls 
     { 
      public static class TopNavigation 
      { 
       public const string Save = "Save"; 
       public const string Refresh = "Refresh"; 
      } 
     } 

     public static class General 
     { 
      public static class Errors 
      { 
       public const string UnexpectedError = "An unexpected error occured."; 
      } 
     } 
    } 
} 

Теперь проблема заключается в том, что если я определяю все в ней, это будет расти чрезвычайно. Каков наилучший способ разделить его на разные/частичные классы или структуру папок, чтобы это сохраняло возможность обслуживания. Имейте в виду ... Чтобы получить ценность, я всегда хочу, чтобы пользователь начал с Constants.Labels ....

Если возможно, мне бы тоже понравился один класс-файл на самый низкий уровень ...

+0

На каком языке это? – Pokechu22

+0

Обновлено ... см. Теги;) -> C# – RubenHerman

+9

Использование файлов ресурсов –

ответ

0

вы можете использовать либо файлы ресурсов, либо файл XML, чтобы хранить их как пару ключей.

0
using System; 

namespace Test 
{ 

    public class TopNavigationConst { 
     private const string SAVE = "Save"; 
     private const string REFRESH = "Refresh"; 

     public String Save {get{return SAVE; }} 
     public String Refresh {get{return REFRESH;}} 
    } 

    public class ErrorsConst 
    { 
     public const string UNESPECTEDERROR = "An unexpected error occured."; 
     public String UnexpectedError {get{return UNESPECTEDERROR; }} 
    } 

    public class ControlsConst 
    { 
     private TopNavigationConst topNavigation = new TopNavigationConst(); 
     public TopNavigationConst TopNavigation {get{return topNavigation;}} 
    } 

    public class GeneralConst 
    { 
     public ErrorsConst errors = new ErrorsConst(); 
     public ErrorsConst Errors {get{return errors;}} 
    } 

    public class LabelsConst 
    { 
     public static ControlsConst controls = new ControlsConst(); 
     public static GeneralConst general = new GeneralConst(); 

     public ControlsConst Controls {get{return controls;}} 
     public GeneralConst General {get{return general;}} 
    } 

    public class Constants 
    { 
     public static LabelsConst labels = new LabelsConst(); 
     public static LabelsConst Labels {get{return labels;}} 
    } 

    public class Test 
    { 
     public static void Main() 
     { 
      var value = Constants.Labels.Controls.TopNavigation.Save; 
      System.Console.WriteLine(value); 

     } 
    } 



} 
+1

Константный инициализатор должен быть константой времени компиляции. Так что не работает – RubenHerman

+0

Вы правы, на самом деле я попытался перевести решение, которое я использовал в Java. –

+0

Я редактировал код с рабочим решением. Но теперь это выглядит не так чисто. В моем случае код генерируется автоматически, так что это не имеет большого значения. –

0

Если иерархия классов не предоставляет никакого значения, кроме организации констант, почему бы просто не использовать пространства имен?

namespace Constants.Labels.Controls 
{ 
    public static class TopNavigation 
    { 
     public const string Save = "Save"; 
     public const string Refresh = "Refresh"; 
    } 
} 

Таким образом, вы достигнете своей цели одного класса-файла на самый низкий уровень.

+0

Действительно, но я хочу, чтобы разработчики ВСЕГДА вводили полное имя при доступе к значению. Если они просто импортируют пространство имен, они могут сразу начинаться с TopNavigation.Save – RubenHerman

0

Лучшим решением (на данный момент) для этой проблемы было работать с частичными классами. Недостаток: для каждого файла существует некоторая повторяющаяся структура. Преимущества: Когда программа расширяется, этот файл не станет огромным. Он разделен в большем количестве файлов. И мне нужно использовать полное имя, чтобы получить правильное значение. Так что это было мое предпочтительное решение:

------------ TopNavigation.cs: ------------

public partial class Constants 
{ 
    public partial class Labels 
    { 
     public partial class Controls 
     { 
      public partial class TopNavigation 
      { 
       public const string Save = "LABELS_CONTROLS_TOPNAVIGATION_SAVE"; 
       public const string New = "LABELS_CONTROLS_TOPNAVIGATION_NEW"; 
      } 
     } 
    } 
} 

- ----------- Errors.cs: ------------

public partial class Constants 
{ 
    public partial class Labels 
    { 
     public partial class General 
     { 
      public partial class Errors 
      { 
       public const string Unexpected = "LABELS_GENERAL_ERRORS_UNEXPECTED"; 
       public const string EmptyArgument = "LABELS_GENERAL_ERRORS_EMPTYARGUMENT"; 
      } 
     } 
    } 
} 

Если кто-то должен опубликовать лучшее решение моей проблемы, я буду счастлив принять это как правильный ответ.