Przesunięcie dobrych intencji na później

Nieistotne co robi poniższa funkcja, jest pewnie trochę nieczytelna, ale tak to właśnie bywa i trochę o tym jest ten post 🙂 Istotne są miejsca występowania zmiennej _start.

        public void ReadData(byte[] bytes)
        {
            _leftFromLastFrame = AppendToArray(_leftFromLastFrame, bytes);

            if (_start == -1)
            {
                _start = FindHeader(_leftFromLastFrame);
                if (_start == -1)
                    return;
            }

            while (_leftFromLastFrame.Length >= _start + FixedFrameLength)
            {
                Array.Copy(_leftFromLastFrame, _start, _frameToParse, 0, FixedFrameLength);
                ParseFrame();
                _start += FixedFrameLength;
            }

            _leftFromLastFrame = RemoveBytes(_leftFromLastFrame, _start);

            _start = -1;
        }

W przykładzie powyżej zmienna _start wydaje się być niepotrzebna w klasie, wystarzczy gdy będzie zmienną lokalną. Niestety z jakiegoś powodu nie chcemy tego teraz sprawdzać, zastawiać się i co najważniejsze testować.

Wykorzystanie TODO

Przydaje się wtedy w takim miejscu dodanie informacji, która przypomni nam następnym razem o potrzebnej zmianie.

            _leftFromLastFrame = AppendToArray(_leftFromLastFrame, bytes);

            // TODO _start does not need to be instance field
            if (_start == -1)
            {
                _start = FindHeader(_leftFromLastFrame);
                if (_start == -1)
                    return;
            }

Ten następny raz może być jutro, ale może też być za kilka tygodni (kiedy już o tym zapomnimy). Osobiście staram się od razu wprowadzać takie drobne zmiany na lepsze (patrz The Boy Scout Rule). Czasem jednak brakuje mi tych 5 minut i muszę commitować teraz (bo już trzeba jechać do pracy ;)) Mam wtedy pewność, że wrócę do tego i nie będzie to dobry grunt dla rozrastania się Dead code.

Czasem takie zmiany nie są małe, gdyż właśnie zauważyliśmy, że 500 linijkowa klasa jest w zasadzie niepotrzebna. Znowu brak czasu i przekładamy to na lepszy moment. Warto, żeby ta wiedza nie zginęła, może koledze z teamu zaoszczędzimy pracy (analizowanie kodu), którą już sami wykonaliśmy.

Gdy nie posłuchamy

Jeśli nie będziemy sobie pomagać w takich momentach, nasz kod stanie się kiedyś spaghetti. Przykładowo, będziemy sprawdzać warunki, które są dawno nieistotne. Sprawdzamy je z powodów historycznych, a co gorsze, jeszcze taki kod kopiujemy w inne miejsca.

private void FooBar()
{
    if (_importantVariable && _unusedVariableBeingAlwaysTrue)
    {
        // some work

        if (_strangeOldMode) // through lifecycle of this application it will never be true
        {
            // a lot of work dealing with special classes prepared for that special case
            // ...
            // ...
        }
        else
        {
            // a lot of work
            // ...
            // ...
        }
    }
}

Podobny wpis

Task List Tokens

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

Jedna odpowiedź na „Przesunięcie dobrych intencji na później

  1. Pingback: dotnetomaniak.pl

Możliwość komentowania jest wyłączona.