Gdzie chowasz swoje hacki?

Jest bug! 😦

function foo(){
    applyResultToDataTable();
    // more code
}

Wywołanie takiej funkcji powoduje błąd w rozmwiarze stylowania i tabelka z danymi jest niewidoczna. Na jednym środowisku działa na innym nie działa. Bug trudny do zlokalizowania/zrozumienia/naprawienia.

Ale można przyhaczyć 🙂 Okazuje się, że „malutki” timeout załatwia sprawę:

setTimeout(function(){
    applyResultToDataTable();
    // more code
}, 100);

Hacki się mszczą, ale teraz musimy dostarczyć paczkę

Dzisiaj zakładamy, że takie hacki się mszczą (dlaczego to osobny ciekawy temat). Kolejne założenie to takie, że w tym akurat momencie tak już zrobimy. Brak czasu lub skilla nie pozwala. Co więć dalej zrobić?

Na pewno można dodać opis:

// Workaround for columns width = 0px; after loading data to DataTables
setTimeout(function(){
    applyResultToDataTable();
    // more code
}, 100);

Kolejny tydzień, kolejny ten sam bug

Kod żyje, innego dnia dowiadujemy się że testy na innym widoku znalazły ten sam problem. I znów w innym miejscu dopisujemy:

// Workaround for columns width = 0px; after loading data to DataTables
setTimeout(function(){
    applyResultToDataTable();
    // more code
}, 100);

Wróc! Najczęściej tak się nie zdarza, najczęściej inny developer nie zna akurat „tego” hacka. Brak komunikacji i przesunięcie w czasie sprawiły, że nikt mu o nim nie powiedział. Więc dopisuje na nowo tego samego (po straceniu czasu na rozkminę), albo znajdzie nowy sposób załatania (i znowu straci czas). Kolejny smutny hack 😦

Bądź EXPLICIT

Ja sugeruję aby takie drogi na skróty od razu opisywać osobnymi metodami.

/*
 * Workaround for columns width = 0px; after loading data to DataTables
 */
function addTimeoutToFixNarrowDataTables(action){
    setTimeout(function(){
        action();
    }, 100);
}
function foo(){
    addTimeoutToFixNarrowDataTables(function(){
        applyResultToDataTable();
        // more code
    }
}

Czy nazwa addTimeoutToFixNarrowDataTables() jest właściwa? Tutaj będzie bardzo wiele opinii. Ja wychodzę z założenia, że lepiej wpisać tutaj wiele rzeczy, bo ktoś szukając rozwiazania swojego problemu w przyszłości znajdzie przynajmniej jedno słowo (korzystając z Search Everywhere). Zgadzam się, że w normalnym kodzie nie chciałbym takich dużych metoda, ale to jest właśnie Hack.

A gdzie umieścić taką metodę? Można gdzieś w klasie z której jest wołana, może jest bazowy kontroller lub serwis z którego kod potrzebujący może wywołać hacka. Ja bym jednak stworzył osobną klasę nazywającą się YouNameItHacks (ControllerHacks, DataTablesHacks, itd). Takich rzeczy nie należy ukrywać. Ktoś może zmarnować dużo czasu zanim znajdzie „dlaczego nowo pisany moduł na takiego dziwnego buga…”.

explicit hacks in visual studio solution

Jak nazwać? Gdzie umieścić? Podzielcie się waszymi pomysłami w komentarzach.

1 Comments on “Gdzie chowasz swoje hacki?

  1. Pingback: dotnetomaniak.pl