Jaki jest najlepszy sposób przechowywania grupy stałych używanych przez mój program? [zamknięte]
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 pytanieMam 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?
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";
}
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.
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
lubprotected
), 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ść bezset
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";
}
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 .
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.
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.
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
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";
}
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