Разработка веб-приложений для долгой жизни (20+ лет)

160

В настоящее время я занимаюсь разработкой веб-приложения для государственного землеустройства. Приложение работает в основном в браузере, используя ajax для загрузки и сохранения данных.

Я сделаю начальную разработку, а затем закончу (это работа для студентов). После этого остальная часть команды будет добавлять случайные функции по мере необходимости. Они знают, как кодировать, но они в основном эксперты по землеустройству.

Учитывая скорость, с которой меняются технологии Javascript, как я могу написать код, который будет работать через 20 лет? В частности, какие библиотеки, технологии и идеи дизайна я должен использовать (или избегать), чтобы сохранить свой код в будущем?

Дэн
источник
94
Я начал программировать на Фортране в конце 1966 года, поэтому у меня было достаточно времени, чтобы подумать именно о такой проблеме. Если вы когда-нибудь встретите хотя бы 50% надежный ответ, пожалуйста, дайте мне знать. Между тем, просто думайте о почти неизбежном моральном устаревании как о «гарантии занятости» :)
Джон Форкош
11
Ничто не вечно в Software Engineery. Только ХОЗЯИН в банках и потому, что никто не решается обновить такие критические системы. Ну, я думаю, что программа, запущенная в Voyager, тоже имеет значение.
Laiv
9
@Laiv Некоторое время назад я работал над приложениями для перевода денег для Bankers Trust, используя обмен сообщениями Swift, работающий на Vax / VMS. Несколько лет спустя Swift удалил (отработал) всю поддержку VMS. Мальчик, это вызвало некоторые проблемы ... и предоставило мне еще один контракт в BTCo. Как я уже сказал выше, «безопасность работы» :). В любом случае, я хочу сказать, что даже критически важные приложения финансового рынка не застрахованы от морального износа.
Джон Форкош
102
Как насчет «Напишите код, который сможет понять следующий разработчик»? Если и когда код устареет до такой степени, что им потребуется найти программиста для его обновления, лучший сценарий - это то, что они поймут, что делает ваш код (и, возможно, почему были приняты определенные решения).
Дэвид Старки
38
Просто используйте старый добрый HTML, без JS, без плагинов, ничего особенного. Если это работает в Lynx, это хорошо для всех времен.
Гай

Ответы:

132

Планирование программного обеспечения для такой продолжительности жизни сложно, потому что мы не знаем, что нас ждет в будущем. Немного контекста: Java была опубликована в 1995 году, 21 год назад. Впервые XmlHttpRequest стал доступен как собственное расширение для Internet Explorer 5, опубликованное в 1999 году 17 лет назад. Прошло около 5 лет, пока он стал доступен во всех основных браузерах. 20 лет, которые вы пытаетесь заглянуть в будущее, - это время, когда даже существуют богатые веб-приложения.

Некоторые вещи, конечно, остались прежними с тех пор. Были предприняты серьезные усилия по стандартизации, и большинство браузеров хорошо соответствуют различным стандартам. Веб-сайт, который работал во всех браузерах 15 лет назад, будет по-прежнему работать одинаково, при условии, что он работал, потому что он нацелен на общее подмножество всех браузеров, а не потому, что он использовал обходные пути для каждого браузера.

Другие вещи приходили и уходили - наиболее заметно Flash. У Flash были различные проблемы, которые привели к его упадку. Самое главное, что она контролировалась одной компанией. Вместо конкуренции внутри платформы Flash была конкуренция между Flash и HTML5 - и победил HTML5.

Из этой истории мы можем собрать пару подсказок:

  • Сделайте это просто: делайте то, что работает прямо сейчас, без использования обходных путей. Такое поведение, вероятно, останется доступным в будущем по причинам обратной совместимости.

  • Избегайте использования собственных технологий и предпочитайте открытые стандарты.

Мир JavaScript сегодня относительно нестабилен с большим потоком библиотек и фреймворков. Тем не менее, почти ни один из них не будет иметь значения через 20 лет - единственная «структура», которая, я уверен, к тому времени будет использоваться, - это Vanilla JS .

Если вы хотите использовать библиотеку или инструмент, потому что это действительно значительно упрощает разработку, сначала убедитесь, что она построена на основе хорошо поддерживаемых современных стандартов. Затем вы должны загрузить библиотеку или инструмент и включить их в свой исходный код. Ваш репозиторий кода должен включать в себя все необходимое, чтобы система работала. Все внешнее - это зависимость, которая может сломаться в будущем. Интересный способ проверить это - скопировать код на флэш-накопитель, перейти на новый компьютер с другой операционной системой, отключить его от Интернета и посмотреть, сможете ли вы заставить свой интерфейс работать. Пока ваш проект состоит из простого HTML + CSS + JavaScript и, возможно, некоторых библиотек, вы, скорее всего, обойдетесь.

Амон
источник
4
Крупномасштабные приложения не поддерживаются в vanilla js, как сейчас. ES6 уже каким-то образом решает проблему, но есть причина, по которой поток или TypeScript набирают популярность.
Энди
34
@DavidPacker Безусловно, TypeScript и т. Д. Великолепны и облегчают разработку. Но как только я представлю процесс сборки, все инструменты, необходимые для процесса сборки, станут зависимостями: NodeJS, Gulp, NPM - кто сказал, что NPM все еще будет в сети через 20 лет? Я должен запустить свой собственный реестр, чтобы быть уверенным. Это не невозможно. Но в какой-то момент лучше отпустить вещи, которые облегчают разработку только сразу, но не в долгосрочной перспективе.
Амон
30
@DavidPacker Существует много динамических языков, и удивительно, что многие успешные системы были построены с Smalltalk, Ruby, Perl, Python, даже с PHP и JS. В то время как статически типизированные языки, как правило, более удобны для сопровождения, в то время как динамические языки, как правило, лучше подходят для быстрого прототипирования, написать поддерживающий JS не невозможно. В отсутствие компилятора высокая квалификация в команде, мастерство и дополнительный упор на четкую организацию кода становятся еще более важными. Лично я думаю, что типы делают все проще, но они не серебряная пуля.
Амон
4
Я только что прочитал "возьми usb и проверь на другой машине"? Почему бы просто не раскрутить virtualbox или просто использовать режим инкогнито (с отключенным ethX).
Kyslik
5
Я не уверен, что ванильный JS будет уверен через 20 лет. Его история была непростой и экспериментальной, и на этом пути она приобрела немало толков, несмотря на то, что она превратилась в восхитительный и эффективный язык (лично я предпочитаю JavaScript или TypeScript). Нетрудно представить, что поставщики вполне могут захотеть отказаться от части или всей этой мелочи, независимо от того, означает ли это, что они начинают предлагать новый альтернативный язык - как, казалось, Google предлагал с Dart, хотя многое из этого, похоже, никуда не делось Или путем исключения и последующего устранения частей JS.
KRyan
178

Что еще более важно, чем выживание вашего кода в течение 20 лет, так это то, что ваши данные сохраняются в течение 20 лет. Скорее всего, это стоит сохранить. Если с вашими данными легко работать, создать альтернативную систему на основе новых технологий будет легко.

  • Итак, начните с четкой и хорошо документированной модели данных.
  • Используйте хорошо зарекомендовавшую себя систему баз данных, такую ​​как Oracle [1] или SQL Server.
  • Используйте основные функции, не пытайтесь втиснуть в новые яркие.
  • Предпочитают просто более умный .
  • Согласитесь, что ремонтопригодность в будущем может быть достигнута за счет таких аспектов, как производительность. Например, у вас может возникнуть соблазн использовать хранимые процедуры, но они могут ограничить возможность сопровождения в будущем, если они не позволят кому-либо перевести систему на более простое решение для хранения.

Если у вас есть такая возможность, то будущее приложение само по себе становится проще, поскольку оно является оберткой для модели данных и может быть заменено, если, например, через 10 лет никто больше не использует Javascript и вам нужно перенести приложение в WASM или что-то. Хранение вещей модульным, менее взаимозависимым, облегчает техническое обслуживание в будущем.


[1] В большинстве комментариев к этому ответу решительно выступает против использования Oracle для БД, ссылаясь на множество совершенно законных причин, по которым Oracle является трудной работой, имеет крутой курс обучения и накладные расходы при установке. Это совершенно обоснованные проблемы при выборе Oracle в качестве БД, но в нашем случае мы ищем не БД общего назначения, а ту, в которой первостепенное значение имеет ремонтопригодность . Oracle существует с конца 70-х годов и, вероятно, будет поддерживаться в течение многих лет, и существует огромная экосистема консультантов и вариантов поддержки, которые могут помочь вам поддерживать его работу. Это переоцененный беспорядок для многих компаний? Конечно. Но будет ли ваша база данных работать в течение 20 лет ? Вполне вероятно.

Авнер Шахар-Каштан
источник
141
Извините, но я должен это сказать. Если вы используете Oracle, вы стреляете по всем в ногу с точки зрения «легко работать». С Oracle не так просто работать. Большой набор функциональных возможностей, которые SQL Server, PostgreSQL и, возможно, даже MySQL делают простыми, Oracle либо не имеет, либо слишком усложняет. У меня никогда не было столько глупых проблем с другими БД, сколько у меня с Oracle; даже просто настроить клиента - огромная боль в заднице. Даже гуглить вещи сложно. Если вы хотите «легко работать», держитесь подальше от Oracle.
jpmc26
4
+1 за то, что данные максимально просты. Для этого используйте стандартный SQL, например, используйте OUTER JOIN вместо оператора +, характерного для оракула . Используйте простые макеты таблиц. Не нормализуйте свои таблицы до абсолютного максимального уровня. Решите, могут ли некоторые таблицы содержать избыточные данные или вам действительно нужно создать новую таблицу, чтобы каждое значение существовало только один раз. Являются ли хранимые процедуры конкретными для поставщика ? Если да, то не используйте их. Не используйте функцию hottst вашего текущего языка: я видел больше программ на COBOL без OOP-функций, чем с ними. И это совершенно нормально.
some_coder
3
@ jpmc26 Я согласен с вашим мнением об Oracle, но, как я уже сказал, «легко работать» не обязательно является основным требованием здесь. Я предпочитаю твердо поддерживаемую платформу, даже если с ней трудно работать. Потому что когда амортизируется более 20 лет, это не так уж плохо.
Авнер Шахар-Каштан
8
Действительно избегайте Oracle. Postgresql - единственная БД, существующая сегодня, которая, вероятно, не будет выглядеть как неудачный выбор через 20 лет.
Джошуа
3
Я хотел бы добавить, что большие СУБД с открытым исходным кодом предпочтительнее, потому что есть большая вероятность, что они не умрут. Если Oracle прекратит зарабатывать деньги через 10 лет, то через 11 он исчезнет. PostreSQL кажется лучшей лошадкой для ставок.
Shautieh
36

Предыдущий ответ amon хорош , но есть два дополнительных момента, которые не были упомянуты:

  • Это не только браузеры; устройства тоже имеют значение.

    Amon упоминает тот факт, что «веб-сайт, который работал во всех браузерах 15 лет назад, все еще будет работать одинаково» , и это правда. Однако посмотрите на сайты, созданные не пятнадцать, а десять лет назад, которые при создании работали в большинстве браузеров для большинства пользователей. Сегодня большая часть пользователей вообще не сможет использовать эти веб-сайты не потому, что изменились браузеры, а потому, что это сделали устройства. Эти веб-сайты будут выглядеть ужасно на небольших экранах мобильных устройств и в конечном итоге вообще не будут работать, если разработчики решат использовать clickсобытие JavaScript , не зная, что это tapсобытие также важно.

  • Вы сосредотачиваетесь на неправильном предмете.

    Технологические изменения - это одно, но более важным является изменение требований . Продукт может нуждаться в масштабировании или иметь дополнительные функции, или могут потребоваться изменения его текущих функций.

    Неважно, что будет с браузерами, устройствами, W3C или ... чем угодно.

    Если вы напишите свой код таким образом, чтобы его можно было реорганизовать , продукт будет развиваться с развитием технологий.

    Если вы пишете свой код так, что никто не может его понять и поддерживать, технологии не имеют значения: любые изменения среды в любом случае приведут к остановке вашего приложения, например, переход на другую операционную систему или даже простая вещь, такая как естественный рост данных. ,

    Как пример, я работаю в разработке программного обеспечения в течение десяти лет. Среди десятков и десятков проектов я решил изменить только два из-за технологий , точнее потому, что PHP сильно изменился за последние десять лет. Это было даже не решение клиента: ему было бы все равно, использует ли сайт пространства имен или замыкания PHP. Однако изменений, связанных с новыми требованиями и масштабируемостью, было много!

Арсений Мурзенко
источник
4
Принятие на различные размеры экрана является общей проблемой. Мобильный телефон в настоящее время очень популярен, но если вы смотрите этот веб-сайт в полноэкранном окне браузера на экране с достаточным разрешением, есть много пустого (потраченного впустую) пространства. Изменение макетов и способ представления информации для наилучшего использования доступных пикселей никогда не происходило разумным образом. Мобильный сделал это очевидным. Но размышление в другом направлении может быть более важным для рассматриваемого вопроса.
ноль
9
@null: хотя я согласен с вашим комментарием, веб-сайты StackExchange могут быть не лучшей иллюстрацией вашей точки зрения. Учитывая данные для отображения, я считаю, что дизайнеры / разработчики StackExchange отлично поработали, отображая их по мере необходимости, в том числе на больших мониторах. Вы не можете сделать основной столбец более широким, потому что текст станет намного труднее читать, и вы не можете использовать несколько столбцов, потому что он не будет хорошо смотреться на короткие вопросы и ответы.
Арсений Мурзенко
Другим хорошим примером является событие «hover», которое часто использовалось в системах меню. Многие из этих меню плохо работают с сенсорными устройствами.
Юстас
Вы на 110% (или более) правы в отношении устройств, и я могу предоставить вам примеры более старых десятилетий. Еще в конце 1980-х я работал над приложениями CICS, работающими на мэйнфреймах IBM и синхронных терминалах 3270. Регион CICS является своего рода аналогом серверных приложений, которые одновременно отправляют на экран синхронные терминалы полных данных, которые, таким образом, аналогичны браузерам выделенных устройств. И программирование CICS было возможно 80% Cobol, 20% PL / 1. Оба эти языка в настоящее время в основном устарели, и появление рабочих станций Unix (Sun и Apollo) в начале 1990-х годов практически полностью убило CICS
Джон Форкош
31

Вы не планируете длиться 20 лет. Легко и просто. Вместо этого вы переносите свои цели на разделение.

Является ли база данных вашего приложения независимой? Если бы вам пришлось переключать базы данных прямо сейчас, не могли бы вы. Является ли ваш язык логики агностиком. Если бы вам пришлось переписать приложение на совершенно новом языке прямо сейчас, не так ли? Вы следуете хорошим правилам дизайна, таким как SRP и DRY?

У меня были проекты в течение более чем 20 лет, и я могу сказать вам, что все меняется. Как всплывающие окна. 20 лет назад вы могли положиться на всплывающее окно, сегодня вы не можете. XSS не было вещью 20 лет назад, теперь вы должны учитывать CORS.

Итак, вы должны убедиться, что ваша логика хорошо отделена, и что вы избегаете использования ЛЮБОЙ технологии, которая привязывает вас к конкретному поставщику.

Это может быть очень сложно время от времени. Например, .NET отлично показывает логику и метод для своего адаптера базы данных MSSQL, который не имеет аналогов в других адаптерах. MSSQL может показаться хорошим планом сегодня, но останется ли он таковым в течение 20 лет? Кто знает. Пример того, как обойти это, чтобы слой данных был полностью отделен от других частей приложения. Тогда, в худшем случае, вам нужно всего лишь переписать весь слой данных, остальная часть вашего приложения останется неизменной.

Другими словами, думайте об этом как о машине. Ваша машина не собирается делать это 20 лет. Но с новыми шинами, новым двигателем, новой трансмиссией, новыми окнами, новой электроникой и т. Д. Этот же автомобиль может находиться на дороге очень долго.

coteyr
источник
2
«Если бы вам пришлось переключать базы данных прямо сейчас, не могли бы вы» Это почти невозможно сделать, если вы делаете что-то большее, чем CRUD в одной строке за раз.
jpmc26
1
Многие ORM не зависят от базы данных. Я мог бы дать любой из проектов, над которыми я работаю, на gaurentee, который я мог бы без труда переключить с SQLLite на MySql и Postgre.
Coteyr
5
И ORM перестают быть очень хорошими инструментами для работы, когда вы делаете больше, чем просто CRUD для одной записи за раз. Вот почему я это уточнил. Я пробовал. По мере роста сложности запроса даже лучшие ORM становятся более сложными, чем просто написание запроса, и даже если вы навязываете свой запрос в них, вы довольно быстро обнаруживаете, что используете специфичные для базы данных функции или оптимизации.
jpmc26
1
Определите «сложный». Была ли это массовая операция? Включал ли он запросы окна? Подзапросы? , CTE? Союзы? Сложные условия группировки? Сложная математика в каждом ряду и совокупности? Сколько объединений в одном запросе? Какие виды соединений? Сколько строк было обработано одновременно? По общему признанию, говорить что-либо по одной строке CRUD (обратите внимание, это означает, что одна строка на запрос, а не на веб-запрос или что-то в этом роде) - это немного гипербола, но путь к тому, когда ORM становится более трудным, чем стоит, гораздо короче, чем думаешь. И шаги по обеспечению эффективности запроса очень часто зависят от базы данных.
jpmc26
4
«Является ли база данных вашего приложения независимой? Если бы вам пришлось переключать базы данных прямо сейчас, не так ли? Является ли ваш язык логики независимым. Если бы вам пришлось переписывать приложение на совершенно новом языке прямо сейчас, не так ли?» - Это АБСОЛЮТНО УЖАСНЫЙ совет! Не ограничивайте себя искусственно тем, что вы считаете самым большим общим знаменателем языков программирования или баз данных - это заставит вас постоянно изобретать велосипед. Вместо этого попытайтесь найти ЕСТЕСТВЕННЫЙ способ выразить желаемое поведение на вашем языке программирования и в выбранной вами базе данных.
FGP
12

Ответы @amon и некоторых других хороши, но я хотел бы предложить вам взглянуть на это с другой точки зрения.

Я работал с крупными производителями и государственными учреждениями, которые полагались на программы или базы кода, которые использовались более 20 лет, и у них всех было одно общее - компания контролировала оборудование. Иметь что-то работающее и расширяемое в течение 20 с лишним лет не сложно, если вы контролируете, на чем оно работает. Сотрудники этих групп разрабатывали код на современных машинах, которые были в сотни раз быстрее машин для развертывания ... но машины для развертывания были заморожены во времени.

Ваша ситуация сложна, потому что веб-сайт означает, что вам нужно планировать две среды - сервер и браузер.

Когда дело доходит до сервера, у вас есть два основных варианта:

  • Полагайтесь на операционную систему для различных функций поддержки, которые могут быть намного быстрее, но означает, что ОС может потребоваться «зависнуть во времени». Если это так, вам нужно подготовить несколько резервных копий установки ОС для сервера. Если через 10 лет что-то выходит из строя, вы не хотите, чтобы кто-то сходил с ума, пытаясь переустановить ОС или переписать код для работы в другой среде.

  • Используйте версионные библиотеки в данном языке / среде, которые работают медленнее, но могут быть упакованы в виртуальную среду и могут работать в разных операционных системах или архитектурах.

Когда дело доходит до браузера, вам нужно разместить все на сервере (то есть вы не можете использовать глобальный CDN для размещения файлов). Мы можем предположить, что будущие браузеры будут по-прежнему использовать HTML и Javascript (по крайней мере, для совместимости), но это действительно предположение / предположение, и вы не можете это контролировать.

Джонатан Ванаско
источник
11
Вы должны учитывать безопасность тоже. 20-летняя неподдерживаемая ОС, вероятно, будет полна дыр в безопасности. Я работал в компании и унаследовал эту проблему. Правительственное агентство, древние ОС (все давно виртуализированы, к счастью), но это была огромная проблема, и обновление было почти невозможным из-за необходимости полностью переписывать программное обеспечение (сотни отдельных PHP-сценариев со спагетти-кодом, каждый из которых имел вызовы из базы данных жестко закодированы, используя устаревшие функции, которые новый драйвер не поддерживает / содрогается).
Если вы идете по пути ОС, в лучшем случае вы можете надеяться, что исправления безопасности были применены, и что будущие сопровождающие смогут экранировать вещи на сетевом уровне. Чтобы спланировать, как все будет работать в долгосрочной перспективе (особенно при отсутствии большого бюджета, так как ОП - студент), вам необходимо принять, что ваше приложение и сервер со временем станут небезопасными. Например, через 20 лет на сервере будут существовать известные эксплойты для версии SSL ... но эта ОС может быть несовместима с версиями openssl через 10 лет. Это все о минимизации компромиссов.
Джонатан Ванаско
@FighterJet, вы всегда можете запустить брандмауэр в поддерживаемой ОС, тогда у вас мало рисков, кроме SQL-инъекций и т. Д., Которые вы должны были бы в любом случае кодировать.
Ян
@Ian: я хочу. Был брандмауэр. Но я не написал код, я унаследовал его. И да, я хотел бы устранить тысячи уязвимостей SQL, но реальная проблема заключалась в том, что код зависел от конкретной версии PHP4 (которая устарела навсегда и полна дыр в безопасности) и конкретная версия драйвера базы данных (которая не работала на более новых ОС), которая помешала нам перейти на более новую версию базы данных ... дело в том, что полагаться на что-то, оставаясь прежним, не всегда работает. Скажем так, я рад, что больше там не работаю.
1
@FighterJet Это действительно хороший пример того, о чем я хотел поговорить. Вы закончили наследование кода, который работает только на определенной версии PHP4, и драйвера, который работает только на определенной ОС ... поэтому вы не можете обновить сервер. Я бы не стал защищать кого-либо, кто бы это ни делал, но это случается. -- много. FWIW, я согласен с вами, но я хотел, чтобы мой ответ способствовал размышлениям об этих типах сценариев, а не выдвигал рекомендации.
Джонатан Ванаско
6

Основой большинства приложений являются данные. Данные навсегда. Код более расходный , изменчивый, податливый. Данные должны быть сохранены, однако. Поэтому сосредоточьтесь на создании действительно надежной модели данных. Держите схему и данные в чистоте. Ожидайте, что новое приложение может быть построено поверх той же базы данных.

Выберите базу данных, которая способна обеспечить ограничения целостности. Неисполненные ограничения, как правило, нарушаются с течением времени. Никто не замечает. Максимально используйте такие возможности, как внешние ключи, уникальные ограничения, ограничения проверки и, возможно, триггеры для проверки. Существуют некоторые приемы злоупотребления индексированными представлениями для обеспечения ограничений уникальности между таблицами.

Поэтому, возможно, вам нужно согласиться с тем, что приложение будет переписано через некоторое время. Если база данных чистая, миграции будет мало. Миграции чрезвычайно дороги с точки зрения труда и вызванных дефектов.

С технологической точки зрения было бы хорошей идеей разместить большую часть приложения на сервере, а не в форме JavaScript на клиенте. Вероятно, вы сможете запускать одно и то же приложение в одном экземпляре ОС в течение очень долгого времени благодаря виртуализации . Это не очень хорошо, но это гарантия, что приложение будет работать через 20 лет без дорогостоящего обслуживания и затрат на оборудование. Делая это, вы, по крайней мере, имеете безопасный и дешевый запасной вариант продолжения работы старого работающего кода.

Кроме того, я считаю, что некоторые технологические стеки более стабильны, чем другие . Я бы сказал, что .NET имеет лучшую историю обратной совместимости в настоящее время. Microsoft очень серьезно относится к этому. Java и C / C ++ также действительно стабильны. Python доказал, что он очень нестабилен с изменениями Python 3. JavaScript на самом деле кажется мне достаточно стабильным, потому что взломать веб-интерфейс не вариант для любого поставщика браузера. Вы, вероятно, не должны полагаться на что-нибудь экспериментальное или прикольное, хотя. («Фанки» определяется как «Я знаю это, когда вижу»).

USR
источник
о истории обратной совместимости .net - я не думаю, что видел java-приложение, которое запрашивало бы более старую версию java, в отличие от этого. Это может измениться в Java 9 или более поздней версии, но пока еще не произошло.
эйс
Это удивительно совместимо на практике, и установка более старой версии рядом не является проблемой. Также обратите внимание, что .NET BCL, по моим оценкам, в 10-100 раз больше, чем встроенные классы Java.
USR
Обратная совместимость означает, что не нужно устанавливать также более старую версию. Но мы отступаем от первоначального вопроса, это на самом деле не имеет отношения к ОП.
эйс
0

Другие ответы имеют смысл. Тем не менее, я чувствую, что комментарии по клиентской технологии слишком усложняют вещи. Я работаю разработчиком в течение последних 16 лет. По моему опыту, пока вы сохраняете свой клиентский код интуитивно понятным, у вас все будет хорошо. Так что никаких «хаков» с фреймами / фреймами и т. Д. Используйте только четко определенные функции в браузерах.

Вы всегда можете использовать режимы совместимости в браузерах, чтобы они работали.

Чтобы подтвердить свою точку зрения, всего несколько месяцев назад я исправил ошибку тысячелетия в коде javascript для клиента, который работает в своем веб-приложении в течение 17 лет. По-прежнему работает на последних машинах, недавней базе данных, новейшей операционной системе.

Вывод: держите это простым и чистым, и у вас должно быть все в порядке.

Джонатан ван де Вин
источник
1
Фреймы и фреймы очень хорошо определены в спецификации HTML. Что делает их неподходящими?
curiousdannii
3
@curiousdannii: это не столько использование фреймов (фреймы больше не поддерживаются в HTML5), сколько использование фреймов и фреймов для асинхронной загрузки контента с помощью сценариев и т. д. Это может отлично работать сейчас, но всегда будет подвергаться изменениям безопасности.
Джонатан ван де Вин
-2

Несколько аксиом:

  • Истина выживает. В этом контексте это будут алгоритмы и модели данных - то, что правдиво представляет «что» и «как» вашего проблемного пространства. Хотя всегда есть потенциал для доработки и улучшения или эволюции самой проблемы.
  • Языки развиваются. Это верно как для компьютерных языков, так и для естественных языков.
  • Все технологии уязвимы для устаревания. Это может занять больше времени для некоторых технологий, чем другие

Наиболее стабильными технологиями и стандартами (наименее уязвимыми для устаревания) являются, как правило, те, которые не являются собственностью и получили наибольшее распространение. Чем шире усыновление, тем больше инерция против практически любых форм изменений. Запатентованные «стандарты» всегда уязвимы для судьбы и прихоти их владельца и конкурентных сил.

Двадцать лет - это очень много времени в компьютерной индустрии. Пять лет - более реалистичная цель. Через пять лет вся проблема, которую должно решить ваше приложение, может быть полностью пересмотрена.

Несколько примеров для иллюстрации:

C и C ++ существуют уже давно. У них есть реализации практически на каждой платформе. C ++ продолжает развиваться, но «универсальные» функции (доступные на всех платформах) в значительной степени гарантированно никогда не будут устаревшими.

Flash почти стал универсальным стандартом, но он запатентован. Корпоративные решения не поддерживать его на популярных мобильных платформах обречены повсеместно - если вы пишете для Интернета, вы хотите, чтобы ваш контент был доступен на всех платформах; Вы не хотите пропустить основной рынок мобильной связи.

WinTel (Windows / x86), несмотря на то, что является частной собственностью Microsoft и Intel, начал с неоптимальной платформы (16-битная внутренняя / 8-битная внешняя 8088 по сравнению с 32-битным внутренним Apple Macintosh / 16-битная внешняя 68000) и эрозия Apple на потребительском рынке остается де-факто выбором для бизнес-платформ. За все это время (25 лет) приверженность обратной совместимости препятствовала будущему развитию и внушала значительную уверенность в том, что то, что работало на старой коробке, все равно будет работать на новой.

Последние мысли

JavaScript может быть не лучшим выбором для реализации бизнес-логики. Из соображений целостности и безопасности данных на сервере должна выполняться бизнес-логика, поэтому клиентский JavaScript должен быть ограничен поведением пользовательского интерфейса. Даже на сервере JavaScript может быть не лучшим выбором. Хотя с небольшими проектами работать с ними проще, чем с другими стеками (Java или C #), в нем отсутствует формальность, которая может помочь вам писать лучшие, более организованные решения, когда все становится сложнее.

Zenilogix
источник