W porządku, po prostu zadzwoń do mnie jako opiekuna krypty w przypadku wszystkich nekro, które robię, ale nigdy nie czułem, że prawdziwa wartość tego została właściwie zrozumiana. Historycznie twierdzono, że „dyskretny JavaScript” lub trzymanie JS z dala od HTML poprzez wbudowane atrybuty modułu obsługi zdarzeń HTML i znaczniki skryptów, które nie łączyły się z plikiem w jak największym stopniu, stanowią ogromny kluczowy element:
- Obawy dotyczące dostępności
- SEO
- I progresywne ulepszenie
KŁAMSTWA! (cóż, teraz będą)
Prawda jest taka, że możesz zrobić technicznie natrętny JavaScript i nadal odciągać powyższe trzy elementy. Chyba że budujesz zawartość HTML dynamicznie, co było wielkim nie-SEO dniem.
Ale przestań i pomyśl ... o Tobie!
Naprawdę, dużą korzyścią, największą i najbardziej niższą wygraną w utrzymywaniu separacji zawsze była bezpośrednia korzyść, jaką uzyskuje od niej deweloper. Możesz mieć tyle programów obsługi zdarzeń, ile chcesz w tym samym elemencie HTML dla tego samego zdarzenia, co jest wygodne. Oznacza to, że jeśli tag z class="some_class"
zawsze zachowuje określone zachowanie, ale także zyskuje pewne dodatkowe zachowanie, gdy znajduje się w id="bonus_behavior"
div, nie musimy zaczynać bałaganu z logiką wewnątrz naszej jednopozwolonej procedury obsługi zdarzeń, aby to rozgałęzić. Możemy po prostu dodawać lub nie dodawać procedury obsługi w zależności od kontekstu.
Zbyt łatwe do odczytania
Kolejną korzyścią jest czytelność. Było to bardziej krytyczne, gdy narzędzia przeglądarki składały się z wyjątkowego komunikatu o błędzie IE informującego, że coś jest nie tak z [object]
IMO, ale to wciąż wielka sprawa. CSS tutaj, JS tam i HTML to miejsce, w którym spotykają się zarówno oni, jak i serwer. Ponieważ wszystkie te rzeczy łączą się w jednym miejscu, warto polegać na haczykach (identyfikatorach, klasach i hierarchii), aby stworzyć warstwę abstrakcji, której wszystko używa do łączenia się z HTML.
IMO, im więcej MOŻESZ trzymać HTML, CSS i JS oddzielone, tym łatwiej jest nie tylko czytać, ale także modyfikować i rozumieć, co się dzieje. Widzę pustą div z „dynamic_combo_box” jako klasę i mam dobry pomysł, że coś robi fantazyjny wybór, który ładuje dane dynamicznie. Mam wskazówki, jak znaleźć to w JS i CSS, a jeśli wpadnę na klasę w tych kwestiach, będę miał dobry pomysł, o co chodzi i jak to znaleźć w HTML.
Zbyt łatwy do zrobienia nawet niechlujny
Oczywiście czytelność idzie w parze z łatwością utrzymania. Kiedy po prostu robisz rzeczy bezpośrednio, zrzucając wszystko do tagów skryptu, w których znajduje się odpowiedni kod HTML, tak często, jak nie, łatwiej jest po prostu wyciąć i wkleić ten skrypt do kodu HTML innej strony, nad którą pracują, gdy chcą podobnej funkcjonalności, co oznacza, że masz teraz jedną rzecz, która najprawdopodobniej ostatecznie stanie się dwie irytująco podobne, ale nie w 100% podobne rzeczy, których zachowanie może z czasem stać się problematyczne z powodu sprzeczności z oczekiwaniami i wymaga dodania bardziej bezsensownego rozgałęzienia w celu obsługi wyjątków, których potrzebujesz inny nie.
Tak więc zachowanie się względem tych haków HTML zachęca do ponownego użycia kodu w inteligentny sposób. Jeśli potrzebujesz rozgałęzić zachowanie dla alternatywnej implementacji, po prostu przejdź do tej samej funkcji i obsłuż ją tam za pomocą hierarchii HTML lub może danych, wyzwalając pewne zachowanie alternatywne. To jeden przystanek dla każdego, kto chce zrozumieć, jak działają elementy interfejsu określonego typu, a te ohydnie leniwe w niewłaściwy sposób wycinanie i wklejanie zrobią właściwą / łatwiejszą w utrzymaniu rzecz tylko dlatego, że najłatwiej jest to zrobić zrób to teraz, a to najlepszy sposób na utrzymanie łatwości konserwacji. Zrób to najłatwiejszą rzeczą do zrobienia nawet dla kogoś, kogo mniej obchodzi czy to z powodu paniki czy apatii.
Ale co z 2014 r.?
Może być uzasadnione, że we współczesnych jednostronicowych aplikacjach niektóre z tych lepkich rzeczy nie powinny być tak dogmatycznie, jak kiedyś, ale wierzcie mi, gdy mówię, że nie jestem jedyną osobą, która został na nim sprzedany, ponieważ ostatecznie ułatwia pracę. Jestem leniwy w (mam nadzieję) głównie dobry sposób. Podoba mi się, gdy muszę zmieniać rzeczy tylko w jednym miejscu, aby wprowadzać zmiany w całej aplikacji, kiedy muszę tylko patrzeć w jednym miejscu, aby dowiedzieć się, co to za błąd, i kiedy mam łatwy czas, aby zrozumieć, co to do cholery jest i jak najlepiej ponownie użyć tego kodu, aby zrobić coś bardzo podobnego.
To dobrze, jakby podział DB lub warstwy danych był dobry. To w końcu oszczędność czasu, dlaczego nie zrobiłem tylko pięciu minut, aby zrobić pranie poprzedniej nocy, zamiast spędzać 10 minut na zamrażaniu bokserów i przeprowadzaniu paranoicznego sprawdzania zapachu następnego dnia rano.
Dla mnie to właśnie te samolubne motywacje zawsze były głównym powodem, dla którego trzymam się nie tylko dyskretnego JS, ale oddzielenie stylu / zachowania / treści dotyczy tak bardzo, jak to możliwe, nawet jeśli to, do cholery, WG, robi rozwiewaj te obawy w zrozumiały i fajny sposób.
Teraz, gdy wszyscy robią SPA i prawie głupie jest próbowanie przekonania biznesu, że powinniśmy dbać o ludzi, którzy działają bez JS (dostępność może być teraz podobno obsługiwana z treściami generowanymi przez JS), wygląda na to, że następnej generacji twórców JS mniej zależy o tym, ale IMO wciąż tam jest wygrana i to głównie dla ciebie, programisty piszącego i utrzymującego te rzeczy. I tak naprawdę, ta wygrana powinna być zawsze najbardziej podkreślonym punktem, ale nigdy nie była z jakiegoś powodu, ponieważ ostatecznie przynosi korzyści tobie, a także produktowi przez szczęśliwy przypadek, dzięki łatwiejszemu dostosowaniu / modyfikacji / debugowaniu.
Czy to jest w porządku?
Chyba tak. W jednorazowej aplikacji do rzucania na konkurs lub coś takiego. Ale nadal bym to zrobił tylko dlatego, że mam taki zwyczaj i wcale nie jest to trudniejsze.