Jak sobie radzić ze stałymi wykorzystywanymi w całym programie?

1

Cześć, mam pytanie odnośnie stałych. Załóżmy że w całym programie wykorzystywane są różnego rodzaju stałe. Jaka jest najlepsza droga z poradzeniem sobie z tym problemem?
Czy dobrą opcją jest stworzenie statycznej klasy "Constants" i odwoływanie się do niej gdzie tego potrzebujemy?

public static class Constants
{
      public const string StateId = "ST";
      public const string CountryId = "CI";
}

Czy może deklarownie na nowo stałej w klasie gdzie tego potrzebujemy?
A może jeszcze inna opcja?

7

Deklarowanie na nowo stałej w każdej klasie kłóci się z ideą stałych.
Jeśli zmienna jest powiązana ściśle z jakąś klasą to powinna być w tej klasie.
Jeśli jest globalnie używana przez wiele klas ale nie jest szczególnie związana z żadną z nich to powinna być w tematycznej klasie w osobnym pliku, przykładowo te StateId i CountryId to jakieś identyfikatory, nie znam szczegółów ale pierwszym pomysłem jest klasa statyczna klasa Identifiers.
Wtedy też możesz uprościć nazwę stałej usuwając Id bo na to już wskazuje nazwa klasy - nie potrzebujesz pisać Constants.StateId tylko możesz napisać Identifiers.State

Nie bój się tworzyć w projekcie wielu małych pliczków. To dużo lepsze niż jeden ogromny plik.

Nie polecam jednej klasy Constants gdzie jest totalny miszmasz. A najgorzej gdy w projekcie są dwie lub więcej takich klas, albo druga się nazywa Shared czy Common bo ktoś nie zauważył poprzednich i nie wiadomo czym się ludzie sugerują przy wybieraniu jednej z nich.

2

Faktycznie stałe wykorzystujecie jako stałe?

Stałe można też grupować, np. poprzez zagnieżdżanie klas:

class Constants
{
  class Group1
  {
    class SubGroup1
    {
      public const int SomeConst = 1;
    }
    class SubGroup2
    {
      public const int SomeConst = 2;
    }
  }
}

Możesz odwoływać się wtedy przez: Constants.Group1.SubGroup1.SomeConst co w jakiś sposób może pomóc je uporządkować.

2

glupie pytanie, czy te stałe sa znane na etapie kompilacji czy np są ładowane z bazy?
tak czy siak to je pogrupuj
jak masz klasę Math, String i tam masz PI, Empty - to też jest stała (Empty jest readonly), ale generalnie stała jest w klasie która najbardziej pasuje

Możesz pogrupować np tak (stale znane na etapie kompilacji np przeliczniki wag)

class WeightConverter
{
    const static double KgToPounds = x.xx;
    const static double PoundsToKg = x.xx;
}

jak to są stałe w programie, ale składowane w bazie - nie wiem, symbole czegoś, śrubek, wkrętów, czegokolwiek - a potem w aplikacji np user może sobie wybrać, ze tu uzyje kg srubek DIN 931 10.9 M8X45 OC a tam 500 gram DIN 931 12.9 Mx1,00 8X45 a w progamie są to elementy statyczne wlaśnie (nie można ich zmieniać, dodawać usuwać, tylko z nich korzystać)
to wtedy też dochodzi organizacja danych w bazie, identyfikacja danego obiektu na zasadzie klucz wartość, a w programie to no np tak (przyjmując, że symbol śruby może być stringiem)

class Screws
{
     private /*Concurrent*/Dictionary<string, Screw> _screws;
     public IEnumerable<string> AwailableScrews()
     {
         if(_screws is null or !_screws.Any()) return  Enumerable.Empty<string>();
         return _screws.Keys.Select(key => key);
     }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1