Refaktoring dbcache.d zakończony

Wszystkie powtarzające się wywołania HQL zostały przeniesione do jednego szablonu. Dzięki temu klasa DBCache całkiem przyjemnie teraz wygląda.

Na przykład obsługa ustawień stała się trywialna:

class DBCache
{
    private {
        Cache!(KeyValue, "key") keyValues;
        // ...
    }
 
    // ...
 
    KeyValue getValue(const string key)
    {
        return keyValues.get(key);
    }
 
    void setValue(T)(const string key, const T value)
    {
        keyValues.setOrUpdate(key, (KeyValue v) => v.value = value.to!string);
    }
}

Przekazanie funkcji ustawiającej wartość jako parametru funkcji setOrUpdate jest całkiem wygodne i wszechstronne, ale nie jest niczym niezwykłym – podobne funkcjonalności oferują C++, C#, Java oraz zapewne inne języki. Chciałbym natomiast zwrócić uwagę na inicjalizację zmiennych w tej klasie:

this(DBSession s)
{
    import std.traits;
 
    foreach(n; FieldNameTuple!DBCache) {
        alias ElementType = typeof(mixin("this." ~ n));
        static if(isInstanceOf!(CacheElement, ElementType)) {
            mixin("this." ~ n) = ElementType(s);
        }
    }
 
    this.session = s;
}

W widocznym powyżej konstruktorze inicjalizuję wszystkie elementy klasy, których typ jest konkretyzacją szablonu CacheElement. Tak potężna introspekcja jest wedle mojej wiedzy unikalna dla D (mowa o językach kompilowanych). Często gdy piszę w C++ brakuje mi tego – ale znów kieruję moje nadzieje ku C++20 i reflexpr.

Jeśli chodzi o Pieruna to czas zabrać się za dodanie komentarzy.

2 thoughts on “Refaktoring dbcache.d zakończony

  1. Как оплатить товары на Гидре

    Так как магазин является анонимной площадкой, то и средства платежа должны быть анонимные. Банковские карты могут отследить, поэтому ими расплатиться не получится. В магазине Hydra onion принимают исключительно криптовалюту, в частности биткоины. Это анонимная децентрализованная криптовалюта, владельцев кошельков отследить невозможно.

    Если у вас еще нет биткоин-кошелька, то придется завести. После этого, покупаете или меняете обычную валюту на криптовалюту, пополняете счет своего аккаунта на Гидре и делаете покупку.

    Монет бронируются на специальном счете, продавец их получит только тогда, когда вы подтвердите получение посылки.

Leave a Reply

Your email address will not be published.