Elm:
Refaktoryzacja

Jak to zrobić:

Załóżmy, że masz funkcję Elm, która robi za dużo, jak mieszanie logiki UI z aktualizacjami stanu. To idealny kandydat do refaktoryzacji. Oryginalnie:

updateAndFormat : String -> Model -> (Model, Cmd Msg)
updateAndFormat input model =
    let
        updatedModel = { model | userInput = input }
    in
    if String.length input > 5 then
        ( updatedModel, Cmd.none )
    else
        ( model, Cmd.none )

Po refaktoryzacji, rozdzielamy troski poprzez wyjęcie logiki do różnych funkcji:

-- Logika aktualizacji jest oddzielona
updateUserInput : String -> Model -> Model
updateUserInput input model = 
    { model | userInput = input }

-- Logika formatowania (widoku) jest także oddzielona
formatUserInput : Model -> (Model, Cmd Msg)
formatUserInput model =
    if String.length model.userInput > 5 then
        ( model, Cmd.none )
    else
        ( { model | userInput = "" }, Cmd.none ) -- Czyść wprowadzanie, jeśli jest za krótkie, jako przykładowa reguła.

-- Funkcja aktualizacji teraz używa funkcji pomocniczych
updateAndFormat : String -> Model -> (Model, Cmd Msg)
updateAndFormat input model =
    model
    |> updateUserInput input
    |> formatUserInput

Z tymi zmianami, masz jasne oddzielenie, a każda funkcja jest łatwiejsza do zrozumienia i testowania.

Dogłębna analiza

Refaktoryzację jako formalną praktykę można prześledzić aż do wczesnych dni programowania, kiedy to koszt zmiany kodu był już rozpoznany jako krytyczny aspekt procesu rozwoju. Godnym uwagi jest, że książka Martina Fowlera “Refaktoryzacja: Ulepszanie struktury istniejącego kodu,” opublikowana pod koniec lat 90-tych, naprawdę ustawiła scenę dla refaktoryzacji z zorganizowanym podejściem i katalogiem “zapachów kodu”, aby identyfikować okazje do refaktoryzacji.

W kontekście Elm, refaktoryzacja wykorzystuje mocne strony języka, takie jak jego silny system typów, który promuje zaufanie podczas procesu. Alternatywy dla ręcznej refaktoryzacji mogą obejmować zautomatyzowane narzędzia transformacji kodu, ale narzędzia Elm w tym obszarze są wciąż na etapie dojrzewania w porównaniu do niektórych starszych języków. Szczegóły implementacji często dotyczą typowych refaktoryzacji, takich jak ekstrakcja funkcji, przemianowanie i upraszczanie warunków. Kompilator Elm jest kluczowym sojusznikiem w refaktoryzacji, ponieważ nie pozwoli Ci wiele przeskoczyć - krzyczy zawsze, gdy coś jest nie tak, zapewniając, że Twój zrefaktoryzowany kod nadal działa.

Zobacz również