Cachowanie wyniku metody GetStatus() a micro-optymalizacja

Mam klase SomeDBStore, która pobiera i obrabia dane z jakiegoś źródła. Najpierw chcemy poznać czy te dane są użyteczne korzystając z funkcji GetStatus() zwracającej enuma StoreStatus. W aktualnym kodzie akurat jest tak, że funkcja GetStatus() jest wywoływana kilkukrotnie na tym samym obiekcie.

    enum StoreStatus
    {
        Ready,
        Failed
        // and more
    }

    class SomeDBStore
    {
        public StoreStatus GetStatus()
        {
            // Retrieve status of current store by analyzing some data form DB
            // Not sure if method is time consuming
        }

        // other methods
    }

Pomyślałem więc, aby zamienić to na property, które wywoła GetStatus() tylko raz w razie konieczności (lazy) i przechowa na przyszłość. Mogłoby to wyglądać:

    enum StoreStatus
    {
        Ready,
        Failed
        // and more
    }

    class SomeDBStore
    {
        public StoreStatus GetStatus()
        {
            // Retrieve status of current store by analyzing some data form DB
            // Not sure if method is time consuming
        }

        private StoreStatus? status = null;
        public StoreStatus Status
        {
            get
            {
                if (status == null)
                {
                    status = GetStatus();
                }
                return (StoreStatus)status;
            }
        }

        // other methods
    }

Z czasem jednak dochodzę do wniosku, że byłaby to tzw. micro-optymalizacja (micro-optimization). Co gorsza jest to zbyt wczesna optymalizacja. Mówi o tym powiedzenie, które bardzo lubię, ale jeszcze nie do końca rozpoznaję, gdy powielam ten błąd: „Premature optimization is the root of all evil”. Rozwinięcie.
Powinniśmy więc zachować kolejność, aby najpierw kod działał, testy przychodziły, itp (oczywiście najlepiej najmniejszym nakładem kodu). Dopiero potem zabieramy się za identyfikację bottleneck’ów i optymalizujemy. Nie wcześniej.

EDIT: Bardzo dobry artykuł o micro-optymalizacji

Advertisements
Ten wpis został opublikowany w kategorii Uncategorized i oznaczony tagami , , , . Dodaj zakładkę do bezpośredniego odnośnika.