Modeluję układ chemiczny i mam problemy z nazywaniem moich elementów / przedmiotów w wyliczeniu.
Nie jestem pewien, czy powinienem użyć:
- wzór atomowy
- nazwa chemiczna
- skrócona nazwa chemiczna.
Na przykład kwasem siarkowym jest H2SO4, a kwasem chlorowodorowym jest HCl.
W przypadku tych dwóch prawdopodobnie użyłbym wzoru atomowego, ponieważ są one dość powszechne.
Mam jednak inne, takie jak heksafluorokrzemian sodu, którym jest Na2SiF6.
W tym przykładzie, wzór atomowej nie jest oczywiste, (mi), ale nazwa chemiczna to brzydko długi: myEnum.SodiumHexaFluoroSilicate
. Nie jestem pewien, jak mógłbym bezpiecznie wymyślić skróconą nazwę chemiczną, która miałaby spójny wzór nazewnictwa.
Jest kilka problemów, które próbuję rozwiązać, nazywając elementy wyliczeniowe.
Pierwszą jest czytelność, przy czym dłuższe nazwy stanowią problem.
Druga to łatwość pobrania kodu dla nowych opiekunów, a tutaj krótsze nazwy stanowią problem.
Kolejną kwestią jest to, że właściciele firm zwykle odnoszą się do pełnej nazwy chemicznej, ale nie zawsze. „Kęski” chemikalia są określane przez ich formułę.
Ostatnim problemem jest upewnienie się, że jest spójny. Nie chcę mieszanej konwencji nazewnictwa, ponieważ nie będzie możliwe zapamiętanie, którego użyć.
Z punktu widzenia konserwacji, które z powyższych opcji nazewnictwa wolisz zobaczyć i dlaczego?
Uwaga: wszystko tutaj poniżej linii ma charakter uzupełniający | materiał wyjaśniający. Nie daj się w to wciągnąć. Główne pytanie dotyczy nazywania niezręcznych obiektów.
Opcja atomowa
public myEnum.ChemTypes { H2SO4, HCl, Na2SiF6 }
Opcja nazwy chemicznej
public myEnum.ChemTypes { Kwas Siarkowy, Kwas chlorowodorowy, Heksafluorokrzemian sodu }
Oto kilka dodatkowych szczegółów z komentarzy do tego pytania:
- Odbiorcami kodu będą tylko programiści, a nie chemicy.
- Używam C #, ale myślę, że to pytanie jest bardziej interesujące, gdy ignoruję język implementacji.
- Zaczynam od 10 - 20 związków i miałbym co najwyżej 100 związków, więc nie muszę się martwić o każdy możliwy związek. Na szczęście jest to domena stała.
Wyliczenie służy jako klucz do wyszukiwania w celu ułatwienia powszechnych / ogólnych obliczeń chemicznych - co oznacza, że równanie jest takie samo dla wszystkich związków, ale wstawiasz właściwość związku, aby uzupełnić równanie.
- Na przykład, masa molowa (wg / mol) jest używana do obliczania liczby moli na podstawie masy (w gramach) związku. FWIW, masa molowa == masa molowa.
- Innym przykładem wspólnego obliczenia jest prawo gazu doskonałego i jego użycie określonej stałej gazowej
Przykładowa funkcja może wyglądać następująco:
public double GetMolesFromMass (double mass_grams, myEnum.ChemTypes chem) { double molarWeight = MolarWeightLookupFunctionByChem (chem); // zwraca gram / mol podwójne mole = masa / masa molowa; // konwertuje na mole mole zwrotne; } // Przykładowe wywołanie: myMoles = GetMolesFromMass (1000, myEnum.ChemTypes.Na2SiF6); //*lub* myMoles = GetMolesFromMass (1000, myEnum.ChemTypes.SodiumHexafluorosilicate);
public double GetSpecificGravity (myEnum.ChemTypes chem, double conc) { // oblicza ciężar właściwy związku chemicznego na podstawie stężenia double sg = SpecificGravityLookupTableByChem (chem, conc); }
Zatem wyliczenie nazwy związku jest używane jako klucz i dla zapewnienia spójności w odniesieniu do związku z powiązanymi funkcjami.
Substance
dowolnych potrzebnych właściwościach.