Nazewnictwo dla nowego API powinno być ustalone od dawna, ale jako że nie było, teraz jest już na prawdę najwyższa pora.
Generalnie całe API przejmie nazewnictwo z szykowanej Stamina.Lib (zmienne z małej, nazwy klas, przestrzeni nazw - z dużej, zmienne prywatne z _ na początku, nazwyPisaneZUżyciemDużychLiterDoOddzielaniaWyrazów)
Do ustalenia jest tylko nazewnictwo identyfikatorów pól w tablicach, identyfikatorów komunikatów i klas do przenoszenia tych komunikatów...
Aktualnie jest:
Kolumny tablicy: CFG_NAZWA, CNT_NAZWA, CFG_KSOUND_MUTE
Komunikaty: IMC_FINDCONTACT, IMI_REFRESHLST, IM_STATUSCHANGED, IM_KSOUND_REGISTERSOUND
Struktury komunikatów: sIMessage_2params, sIMesage_statusChanged, sIMessage_kSoundRegisterSound
Akcje: IMIA_OPENMESSAGE, IMIG_MAIN, IMIA_KSOUND_MUTE
- Identyfikatory są często mało czytelne i bardzo długie,
- brakuje porządnego grupowania,
- nazwy struktur komunikatów są za długie
+ w stylu WinApi,
+ jest z nami od dawna
+ użycie pola tablicy lub komunikaty widać w kodzie od razu
Ostatnio używane:
Wszystko siedzi w swoich przestrzeniach nazw:
Kolumny: CFG::nazwa, CNT::nazwa, KSound::CFG::mute
Komunikaty: IM::findContact, IM::refreshList, IM::statusChanged, KSound::IM::registerSound
Struktury: IM::_2params , IM::_statusChanged, KSound::IM::_registerSound
Akcje: Act::openMessage, Act::gMain, KSound::Act::mute
- Duża liczba namespace'ów, zwłaszcza przy krótkich API wygląda często dziwnie i wydaje się przesadzona...
- IM::findContact, IM::refreshList są w jednej przestrzeni - brakuje rozróżnienia pomiędzy komunikatem do core/UI/wtyczki
- '_' w nazwie struktury jest sprzeczne z zasadami nazw stamina.lib i do tego zupełnie nie intuicyjne
+ mamy pełną dowolność w używaniu nazw przestrzeni... Można użyć IM::registerSound, jak i KSound::IM::registerSound...
+ kontekstowe podpowiedzi, np. w VisualStudio pokazują tylko identyfikatory z namespace'a więc znajdywanie prawidłowych jest banalnie proste
Propozycja 1:
Kolumny: CFG::nazwa, CNT::nazwa, KSound::CFG::mute
Komunikaty: IMC::findContact, IMI::refreshList, IM::statusChanged, KSound::IM::registerSound
Struktury: IM::TwoParams , IM::StatusChanged, IMC::FindContact, KSound::IM::RegisterSound
Akcje: ACT::openMessage, ACT::groupMain, KSound::ACT::mute
- jeszcze większa liczba przestrzeni nazw (IM, IMC, IMI)
- użyte w kodzie mają niższą "widoczność" od standardowcyh, chociaż w pewnym stopniu ratują je przedrostki przestrzeni nazw...
- identyfikator komunikatu od klasy rozróżnia tylko wielkość pierwszej litery
+ bardzo czytelny i jednoznaczny podział na przestrzenie
+ pełna zgodność z zasadami dla Stamina.Lib
+ wyjątkowo zgodne z podpowiedziamy kontekstowymi
+ bardzo łatwe w dokumentacji, doxygen elegancko rozbije przestrzenie
Propozycja 2:
Wszystko znajduje się w jednej przestrzeni - np. Konnekt, lub przestrzeni wtyczki np. KSound
Kolumny: CFG_nazwa, CNT_nazwa, KSound::CFG_mute
Komunikaty: IMC_findContact, IMI_refreshList, IM_statusChanged, KSound::IM_registerSound
Struktury: IMTwoParams , IMStatusChanged, IMCFindContact, KSound::IMRegisterSound
Lub ewentualnie: TwoParamsIM, StatusChangedIM, FindContactIM, KSound::RegisterSoundIM
Akcje: ACT_openMessage, ACT_groupMain, KSound::ACT_mute
- brak grupowania
- brak możliwości ominięcia przedrostka
- niezbyt zgodne z zasadami dla Stamina.Lib
+ jest prostą mieszanką tego co było, z tym co będzie :]
Dla zachowania zgodności stare define'y będą oczywiście nadal dostępne. Nowe deklaracje będą zmiennymi typu const o ściśle określonych typach (dzięki czemu będzie trudniej popełnić błąd podczas pisania kodu).
Wszystkie pozostałe obiekty będą używały zasad dla Stamina.Lib.
Gdy cała lista zasad zostanie porządnie skompletowana podamy ją do publicznej wiadomości
Czekam na komentarze...