Refaktoring dbcache.d rozpoczęty

Pisząc kolejne metody do cache DB ciężko było nie zauważyć, że znaczna część ich kodu się powtarza. Z tego powodu utworzyłem szablon CacheElement (nazwa robocza).

Jednocześnie operacje na samej bazie przeniosłem do osobnego szablonu DBElementDriver (nazwa jeszcze bardziej robocza), który jest odpowiedzialny za wykonywanie odpowiednich zapytań w bazie danych. Parametrami tego szablonu są: klasa elementu oraz nazwa pola odpowiadającego za klucz.

Zanim użyjesz projektu open-source, upewnij się, że nie został porzucony

Do użycia ORM-a przekonał mnie znajomy. W założeniu: super. Nie będę się rozpisywał czym jest ORM i jakie funkcjonalności ma spełniać – na pewno jest to wielokrotnie opisane przez bardziej kompetentnych w tym zakresie ludzi. Dość powiedzieć, że dzięki temu korzystam z natywnych klas reprezentujących dane, np.:

class PostData
{
    @Generated @Id int id;
    Post post;
    string title;
    string markdown;
    string excerpt;
    Nullable!string gpg;
    DateTime timestamp;
    @ManyToMany Tag[] tags;
}

printf debugging – czytelne i wygodne wypisywanie zmiennych

Uprzedzając krytykę: słyszałem o czymś takim jak debugger. Nie zawsze ma on jednak zastosowanie:

  • debuggery często nie radzą sobie z bardziej zaawansowanymi typami zmiennych (zaczynając ju​ż od C++-owego std::string, o klasach w D nie wspominając),
  • czasem zachodzi potrzeba sprawdzenia większej liczby przebiegów programu lub funkcji. Przechodzenie tego wszystkiego pod debuggerem to nieporozumienie,
  • może nie być w ogóle możliwości użycia debuggera – n.p. w przypadku sprzedaży oprogramowania,
  • wyciąganie armaty (debuggera) na mały problem-muchę również może być znaczącą przesadą.

Z powyższych powodów (ale głównie ostatniego), utworzyłem sobie proste makro w C++ pozwalające czytelnie przedstawiać zawartość zmiennych: