Oto szczegółowe pytanie dotyczące implementacji guru JavaScript.Implementacja skomplikowanej tabeli decyzji w JavaScript
Mam interfejs użytkownika z pewną liczbą pól, w których wartości pól zależą w skomplikowany sposób od wartości siedmiu bitów danych wejściowych. Co dokładnie powinno być wyświetlane dla jednej z możliwych 128 wartości, która zmienia się regularnie, gdy użytkownicy widzą więcej aplikacji?
W tej chwili używam tego jako drzewa decyzyjnego przez grzebień if-then-else, ale jest on kruchy pod zmianami wymagań i jest trudny do uzyskania.
podejście Jedna realizacja Myślałem o to, aby tablicę wartości od 0x0 do 0x7F, a następnie zapisać zamknięcie w każdym miejscu -
var tbl; // initialize it with the values
...
tbl[0x42] = function(){ doAThing(); doAnotherThing(); }
a następnie powołać je
tbl[bitsIn]();
To przynajmniej sprawia, że logika decyzyjna staje się wiązką zadań.
Pytanie: czy jest lepszy sposób?
(Aktualizacja: kurczę, skąd ta linia o „ajax tagów iphone” tam dostać Nic więc dziwnego, że to trochę zastanawiające.)
Aktualizacja
Więc co się stało ? Zasadniczo wziąłem czwartą opcję, chociaż podobną do tej, którą sprawdziłem. Logika była wystarczająco złożona, że w końcu zbudowałem program w języku Python, aby wygenerować tabelę prawdy na serwerze (generując kod Groovy, w rzeczywistości hostem jest aplikacja Grails) i całkowicie przenieść logikę decyzji do serwera. Teraz strona JavaScript po prostu interpretuje obiekt JSON zawierający wartości dla różnych pól.
Ostatecznie prawdopodobnie przejdzie jeszcze jedną iterację i stanie się danymi w tabeli bazy danych, indeksowanej przez wektor bitów.
Część napędzana blatem stołowym z pewnością okazała się być najlepszym rozwiązaniem; nastąpiło już pół tuzina nowych zmian w szczególnych wymaganiach dotyczących wyświetlania.
z tego co rozumiem Twojego problemu, twoje myśli refactoring są zdrowe, ale ja tbh nie jestem pewien z Twojego opisu, czego potrzebujesz: P –
Czy każdy bit determinuje określone działanie? Jeśli tak, dlaczego nie wykonać bitowej ORAZ wartości na [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40] – draeton
@Martin, chodzi o to, czy istnieje inny, bardziej elastyczny sposób robienia tego niż mój stół lambdas. –