Odpowiedź z perspektywy front-end:
Nie słuchaj wszystkich, którzy mówią, że nie da się tego zrobić, ponieważ eksperymentalna usługa internetowa Uniwersytetu Stanowego w San Francisco, którą napisałem w 1996 roku, w końcu trafiła do nieba kilka lat temu i nigdy nie potrzebowała żadnej poprawki zgodności przeglądarki w tym czasie ; to prawie połowa twojego 40-letniego celu. A ten oparty na JavaScript interfejs, który stworzyłem w 1998 r. Dla projektu Stanford Research Institute, został zastąpiony czymś bardziej błyskotliwym kilka lat później, ale nie ma powodu, aby oryginalny interfejs użytkownika nadal nie działał dzisiaj z drobnymi poprawkami zgodności.
Sztuczka polega na tym, aby Twoja aplikacja korzystała wyłącznie z powszechnie obsługiwanych standardów W3C / ECMA i miała przejrzysty design pod Twoją kontrolą. Podczas gdy wiele aplikacji internetowych napisanych zgodnie z modną technologią z lat 90. nie działa dobrze lub w ogóle dzisiaj, aplikacje internetowe z lat 90. napisane zgodnie z głównymi standardami nadal działają. Mogą wyglądać passé, ale działają.
Celem nie jest napisanie aplikacji internetowej, która wejdzie na ich serwer i pozostanie tam przez 40 lat bez ponownego dotykania go. Ma zbudować fundament, który może być nadal używany przez dziesięciolecia, który może się rozwijać, aby obsługiwać nowe funkcje bez konieczności ponownej przebudowy.
Przede wszystkim musisz kodować do oficjalnych standardów i tylko do oficjalnych standardów. Żadna funkcja JavaScript nie jest częścią ratyfikowanego standardu ECMAScript; ES5.1 jest aktualną wersją i jest ogólnie obsługiwany, więc można ją bezpiecznie celować. Podobnie, obecne wersje HTML5, CSS i Unicode są dobre. Brak eksperymentalnych funkcji JavaScript, CSS3 lub HTML (tych z prefiksami dostawcy lub bez 100% zgodności między przeglądarkami). I żadnych specyficznych dla przeglądarki hacków. Możesz zacząć korzystać z nowej funkcji, gdy będzie w standardzie i wszyscy będą ją obsługiwać bez prefiksów.
Wsparcie dla ES5 oznaczałoby porzucenie IE8 lub wcześniejszej wersji, co i tak sugeruję, ponieważ wymaga specyficznych dla przeglądarki hacków, które będą bezużyteczne za kilka lat. Proponuję tryb ścisły ES5, aby uzyskać najlepszą szansę na długowieczność, która faktycznie ustawia podstawową kompatybilność przeglądarki w IE10 i najnowszych wersjach wszystkich innych . Przeglądarki te mają także natywną obsługę wielu funkcji sprawdzania poprawności formularzy HTML5 i funkcji symboli zastępczych, które będą przydatne przez bardzo długi czas.
Nowe wersje ECMAScript zachowują kompatybilność ze starszymi wersjami, więc o wiele łatwiej będzie przyjąć nadchodzące funkcje, jeśli kod zostanie napisany zgodnie z obowiązującymi standardami. Na przykład klasy zdefiniowane przy użyciu nadchodzącej class
składni będą w pełni zamienne z klasami zdefiniowanymi przy użyciu bieżącej constructor.prototype
składni. W ciągu pięciu lat programista może przepisać klasy do formatu ES6 na zasadzie plik po pliku, nie niszcząc niczego - zakładając oczywiście, że masz również dobre testy jednostkowe.
Po drugie, unikaj modnych ram aplikacji JavaScript, zwłaszcza jeśli zmieniają sposób kodowania aplikacji. Kręgosłup był wściekły, potem SproutCore i Ember, a teraz Angular jest ramą, którą wszyscy uwielbiają promować. Mogą być przydatne, ale mają też coś wspólnego: często psują aplikacje i wymagają zmian kodu, gdy pojawiają się nowe wersje, a ich długowieczność jest wątpliwa. Niedawno zaktualizowałem aplikację Angular 1.1 do wersji 1.2 i sporo trzeba było przepisać. Podobnie przejście z Backbone 2 do 3 wymaga wielu zmian HTML. Powodem są powolne standardy, ale ramy te poruszają się szybko, a koszty okresowego łamania są kosztem.
Ponadto nowe oficjalne standardy często pozostawiają stare ramy przestarzałe, a kiedy to się dzieje, te ramy albo mutują (z przełomowymi zmianami), albo zostają w tyle. Wiesz, co stanie się ze wszystkimi konkurencyjnymi bibliotekami obietnic na świecie po ratyfikacji ECMAScript 6 i wszystkich przeglądarek obsługujących standardową klasę Promise? Staną się przestarzałe, a ich twórcy przestaną je aktualizować. Jeśli wybierzesz odpowiednią strukturę, kod może się wystarczająco dobrze dostosować, a jeśli źle zgadniesz, przyjrzysz się poważnemu refaktoryzacji.
Więc jeśli zastanawiasz się nad zastosowaniem biblioteki lub frameworku innej firmy, zadaj sobie pytanie, jak trudno będzie ją usunąć w przyszłości. Jeśli jest to framework taki jak Angular, którego nigdy nie można usunąć bez przebudowania aplikacji od zera, to dobry znak, że nie można go użyć w 40-letniej architekturze. Jeśli jest to widget kalendarza innej firmy, który został wyodrębniony za pomocą niestandardowego oprogramowania pośredniego, jego wymiana zajmie kilka godzin.
Po trzecie, nadaj mu dobrą, czystą strukturę aplikacji. Nawet jeśli nie używasz frameworka aplikacji, możesz nadal korzystać z narzędzi programistycznych, budować skrypty i dobry, czysty projekt. Osobiście jestem fanem zarządzania zależnościami Closure Toolkit, ponieważ jest on lekki, a jego koszty ogólne są całkowicie usuwane po zbudowaniu aplikacji. LessCSS i SCSS są również świetnymi narzędziami do organizowania arkuszy stylów i tworzenia opartych na standardach arkuszy stylów CSS do wydania.
Możesz także zorganizować własny kod w klasy jednorazowego użytku o strukturze MVC. To znacznie ułatwi powrót do przyszłości za kilka lat i zrozumienie, o czym myślałeś, kiedy coś napisałeś, i zastąpienie tylko tych części, które tego potrzebują.
Powinieneś także postępować zgodnie z radami W3C i całkowicie ukryć informacje prezentacyjne w swoim HTML. (Obejmuje to kody, takie jak nadawanie elementom nazw klas prezentacyjnych, takich jak „duży zielony tekst” i „szerokość dwóch kolumn”.) Jeśli Twój HTML jest semantyczny, a CSS jest prezentacyjny, o wiele łatwiej będzie go utrzymać i dostosować na nowe platformy w przyszłości. Łatwiej będzie także dodać obsługę specjalistycznych przeglądarek dla osób niewidomych lub niepełnosprawnych.
Po czwarte, zautomatyzuj swoje testy i upewnij się, że masz prawie pełny zasięg. Napisz testy jednostkowe dla każdej klasy, po stronie serwera lub w JavaScript. Na froncie upewnij się, że każda klasa działa zgodnie ze specyfikacją we wszystkich obsługiwanych przeglądarkach. Zautomatyzuj te testy z bota kompilacji dla każdego zatwierdzenia. Jest to ważne zarówno dla długowieczności, jak i niezawodności, ponieważ można wcześnie wykryć błędy, nawet jeśli obecne przeglądarki je zasłaniają. Zarówno frameworki testowe oparte na JSUnit Jasmine, jak i Google Closure są dobre.
Będziesz także chciał przeprowadzić pełne testy funkcjonalne interfejsu użytkownika, w których Selenium / WebDriver są dobre. Zasadniczo piszesz program, który przechodzi przez interfejs użytkownika i używa go tak, jakby ktoś go testował. Połącz je również z robotem budowlanym.
Wreszcie, jak wspomnieli inni, twoje dane są najważniejsze. Zastanów się nad modelem przechowywania danych i upewnij się, że jest on trwały. Upewnij się, że twój schemat danych jest solidny, i upewnij się, że został dokładnie przetestowany przy każdym zatwierdzeniu. I upewnij się, że architektura twojego serwera jest skalowalna. Jest to nawet ważniejsze niż cokolwiek, co robisz w interfejsie.