Wpis z mikrobloga

No to teraz mam proste, wydawałoby się pytanie. :) O nazewnictwo się rozchodzi.

Załóżmy, że mam potrzebę wczytywać dane z pliku. Oczywiście wczytywanie z pliku jest operacją, która może się z różnych względów nie powieść, więc jak bozia przykazała rozdzieliłem to na dwie metody. Publiczna otwiera plik o zadanej nazwie i sprawdza czy wszystko jest w porządku (czy prawidłowy typ pliku, czy można z niego czytać, czy spełnione są inne warunki pozwalające wykonać tę operację) i jeśli tak wywołuje prywatną, która wczytuje dane do odpowiednich zmiennych.

Metody są powiązane ze sobą 1:1, istnienie każdej z nich jest pozbawione sensu bez istnienia drugiej. Publiczna nazywa się, jakże oryginalnie, "loadFile". Jak powinienem nazwać metodę prywatną, żeby już sama nazwa wskazywała wyraźnie powiązanie z loadFile, tak żeby nikt nie miał wątpliwości że to jest tak naprawdę jedna i ta sama funkcjonalność rozdzielona na dwie metody?

Pytam bo często się zdarza, że metody publiczne stanowią sprawdzający poprawność podanych argumentów interfejs metod prywatnych i nigdy nie wiem jak nazywać prywatne. Chodzi mi o schemat, konwencję, dobrą praktykę. :) Znacie odpowiedź?


#programowanie #stylkodowania
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Onoki: Ja bym podszedł do tego w ogóle odwrotnie - tworzył metodę publiczną jednoznacznie kojarzącą się z ładowaniem danych, a w niej dodatkowo wywoływał metodę sprawdzającą poprawność pliku.
  • Odpowiedz
@Onoki: Ale ty ich nie powinieneś widzieć w ogóle ;) tak samo jak nie widzisz klas w namespace detail biblioteki standardowej twojego kompilatora.
  • Odpowiedz
@KrzaQ2: Ach, bo myślałem że publiczna ma się nazywać loadFileImpl. Mój błąd. :)

Być może masz rację, że takie rozwiązanie jest najlepsze. Choć do bólu, proste jest piękne. Wiesz może, czy stosuje się je w poważnych projektach?
  • Odpowiedz
@Yahoo_: imho nawet dwie metody mogą wystarczyć (choć nie muszą). w loadFile() wywołujesz najpierw canLoad(). Metoda canLoad() ma rzucić wyjątek jeśli coś nie bangla, a w miejscu gdzie wywołujesz loadFile() przechwytujesz i odpowiednio reagujesz.
  • Odpowiedz
@Yahoo_: No, to właściwie to samo. Jeżeli sprawdzanie poprawności / możliwości jest bardzo rozbudowane to oczywiście, że lepiej wydzielić je w osobnej metodzie. Wtedy loadFile() sprowadza się do:

void loadFile(...) {

if(canLoad(...))
  • Odpowiedz
Być może masz rację, że takie rozwiązanie jest najlepsze. Choć do bólu, proste jest piękne. Wiesz może, czy stosuje się je w poważnych projektach?


@Onoki: Np. PIMPL, uƶywany na pewno w Qt i pewnie w gazylionie innych projektów.

Implementacje standardowej biblioteki mają podprzestrzenie nazw "detail", gdzie trzymają implementacje szablonów, pewnie są inne przykłady ale cięƶko mi się teraz myśli.
  • Odpowiedz