Jaki jest najlepszy sposób przechowywania grupy stałych używanych przez mój program? [zamknięte]

zamknięte . To pytanie jest oparte na opinii . Obecnie nie przyjmuje odpowiedzi.

Chcesz poprawić to pytanie? zaktualizuj pytanie, aby mogło być odpowiedź z faktami i cytatami przez edytując ten post .

Zamknięte 2 lata temu .

Popraw to pytanie

Mam różne stałe, których używa mój program... string ' s, int's, double' S, itp... Jak najlepiej je przechowywać? Nie sądzę, że chcę Enum, ponieważ dane nie są wszystkie ten sam typ i chcę ręcznie ustawić każdą wartość. Mam trzymać je wszystkie w pustej klasie? A może jest lepszy sposób?

 101
Author: NightOwl888, 2009-11-12

9 answers

Prawdopodobnie możesz je mieć w klasie statycznej, o statycznych właściwościach tylko do odczytu.

public static class Routes
{
    public static string SignUp => "signup";
}
 142
Author: Daniel A. White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-15 15:14:55

IMO używanie klasy pełnej stałych jest dobre dla stałych. Jeśli zmienią się pół-od czasu do czasu, zalecam użycie AppSettings w konfiguracji i klasie ConfigurationManager.

Kiedy mam "stałe", które są rzeczywiście wyciągane z AppSettings lub podobnych, nadal będę miał klasę "stałe", która zawija odczyt z menedżera konfiguracji. Zawsze bardziej sensowne jest mieć Constants.SomeModule.Setting zamiast uciekać się bezpośrednio do ConfigurationManager.AppSettings["SomeModule/Setting"] w dowolnym miejscu, które chce zużywaj tę wartość ustawienia.

Punkty bonusowe za tę konfigurację, ponieważ SomeModule prawdopodobnie byłaby klasą zagnieżdżoną wewnątrz pliku Constants, możesz łatwo użyć Dependency Injection, aby wstrzyknąć SomeModule bezpośrednio do klas, które od niego zależą. Możesz także rozpakować interfejs na SomeModule, a następnie utworzyć depenedencję do ISomeModuleConfiguration w swoim kodzie, co pozwoli Ci oddzielić zależność od stałych plików, a nawet potencjalnie ułatwić testowanie, szczególnie jeśli ustawienia te pochodzą z aplikacji AppSettings i można je zmieniać za pomocą przekształceń konfiguracyjnych, ponieważ ustawienia są specyficzne dla środowiska.

 27
Author: Chris Marisic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-17 17:17:46

To, co lubię robić, jest następujące (ale pamiętaj, aby przeczytać do końca, aby użyć właściwego typu stałych):

internal static class ColumnKeys
{
    internal const string Date = "Date";
    internal const string Value = "Value";
    ...
}

Przeczytaj to, aby wiedzieć, dlaczego const może nie być tym, czego chcesz. Możliwe typy stałych to:

  • const pola. Nie używaj across assemblies (public lub protected), Jeśli wartość może zmienić się w przyszłości, ponieważ wartość będzie zakodowana na twardo w czasie kompilacji w tych innych assemblies. Jeśli zmienisz wartość, Stara wartość będą używane przez inne zespoły, dopóki nie zostaną ponownie skompilowane.
  • static readonly pola
  • static własność bez set
 20
Author: Marcel Gosselin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-30 14:03:49

To jest najlepszy sposób IMO. Nie ma potrzeby stosowania właściwości, lub readonly:

public static class Constants
{
   public const string SomeConstant = "Some value";
}
 11
Author: Philip Wallace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-12 18:04:02

Odpowiednia jest pusta Klasa statyczna. Rozważ użycie kilku klas, aby skończyć z dobrymi grupami powiązanych stałych, a nie jednym gigantycznym Globalem.plik cs.

Dodatkowo dla niektórych stałych int rozważmy zapis:

[Flags]
enum Foo
{
}

Ponieważ pozwala to traktować wartości jak flagi .

 4
Author: emptyset,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-12 17:43:39

Kolejny głos za użyciem sieci.config lub app.config. Pliki konfiguracyjne są dobrym miejscem dla stałych, takich jak łańcuchy połączeń itp. Wolę nie patrzeć na źródło, aby przeglądać lub modyfikować tego typu rzeczy. Klasy statycznej, która odczytuje te stałe z a .plik konfiguracyjny może być dobrym kompromisem, ponieważ pozwoli aplikacji uzyskać dostęp do tych zasobów tak, jakby były one zdefiniowane w kodzie, ale nadal daje elastyczność posiadania ich w łatwo widocznej / edytowalnej przestrzeni.

 4
Author: 3Dave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-12 17:44:52

Tak, a static class do przechowywania stałych byłoby w porządku, z wyjątkiem stałych, które są związane z określonymi typami.

 1
Author: bruno conde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-12 17:50:48

Jeśli te stałe są referencjami serwisowymi lub przełącznikami wpływającymi na zachowanie aplikacji, ustawiłbym je jako Ustawienia użytkownika aplikacji. W ten sposób, jeśli trzeba je zmienić, nie trzeba ich przekompilowywać i nadal można odwoływać się do nich za pomocą klasy właściwości statycznych.

Properties.Settings.Default.ServiceRef
 1
Author: Aaron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-12 18:17:46

Sugerowałbym klasy statyczne z odczytem statycznym. Proszę znaleźć poniższy fragment kodu:

  public static class CachedKeysManager
    {
        public static readonly string DistributorList = "distributorList";
    }
 0
Author: KAPIL SHARMA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-15 22:40:16