Я уже некоторое время работаю веб-разработчиком, а недавно начал изучать функциональное программирование. Как и у других, у меня были серьезные проблемы с применением многих из этих концепций в моей профессиональной деятельности. Для меня основной причиной этого является то, что я вижу, что конфликт между целью FP по сохранению состояния без сохранения состояния кажется совершенно несовместимым с тем фактом, что большая часть работы по веб-разработке, которую я выполнял, в значительной степени привязана к базам данных, которые очень ориентированы на данные.
Одна вещь, которая сделала меня гораздо более продуктивным разработчиком в области ООП, - это открытие объектно-реляционных преобразователей, таких как MyGeneration d00dads для .Net, Class :: DBI для perl, ActiveRecord для ruby и т. Д. Это позволило мне держаться подальше от написания операторов вставки и выбора в течение всего дня и сосредоточиться на простой работе с данными как с объектами. Конечно, я все еще мог писать SQL-запросы, когда требовалась их мощность, но в остальном это было красиво абстрагировано за кулисами.
Теперь, переходя к функциональному программированию, похоже, что для многих веб-фреймворков FP, таких как Links, требуется писать много шаблонного кода sql, как в этом примере . Веблоки кажутся немного лучше, но они, похоже, используют своего рода модель ООП для работы с данными и по-прежнему требуют написания кода вручную для каждой таблицы в вашей базе данных, как в этом примере . Я полагаю, вы используете некоторую генерацию кода для написания этих функций сопоставления, но это явно не похоже на шепот.
(Обратите внимание, я не очень внимательно изучал веб-блоки или ссылки, возможно, я просто неправильно понимаю, как они используются).
Итак, вопрос в том, что для частей доступа к базе данных (которые, как я считаю, довольно большие) веб-приложения или другой разработки, требующей интерфейса с базой данных sql, мы, похоже, вынуждены пойти по одному из следующих путей:
- Не используйте функциональное программирование
- Доступ к данным раздражающим, неабстрагированным способом, который включает в себя ручное написание большого количества SQL или SQL-подобного кода ala Links
- Заставьте наш функциональный язык превратиться в парадигму псевдо-ООП, тем самым убрав часть элегантности и стабильности настоящего функционального программирования.
Ясно, что ни один из этих вариантов не кажется идеальным. Нашел способ обойти эти проблемы? Здесь действительно есть проблема?
Примечание: я лично больше всего знаком с LISP на фронте FP, поэтому, если вы хотите привести какие-либо примеры и знаете несколько языков FP, то, вероятно, предпочтительным языком будет Lisp.
PS: По вопросам, связанным с другими аспектами веб-разработки, см. Этот вопрос .