Я деякий час був веб-розробником, і останнім часом почав вивчати деякі функціональні програми. Як і в інших, у мене виникли значні проблеми, коли я застосовую багато цих понять до своєї професійної роботи. Для мене первинною причиною цього є те, що я бачу, що конфлікт між метою FP - залишатися без громадянства, цілком суперечить тому факту, що більшість робіт із розробки веб-сайтів були сильно прив'язані до баз даних, дуже орієнтованих на дані.
Одне, що зробило мене набагато більш продуктивним розробником з боку речей OOP, - це відкриття об'єктно-реляційних картографів, таких як MyGeneration d00dads для .Net, Class :: DBI для perl, ActiveRecord для ruby тощо. Це дозволило мені триматися подалі від написання вставляти та вибирати висловлювання протягом усього дня, а також зосереджуватись на легкій роботі з даними як об'єктами. Звичайно, я все-таки могла писати запити SQL, коли потрібна їх потужність, але в іншому випадку це було чудово абстраговано за лаштунками.
Тепер, звертаючись до функціонального програмування, схоже, що для багатьох веб-рамок FP, таких як Посилання, потрібно писати багато sql коду, як у цьому прикладі . Вебблоки здаються трохи кращими, але, здається, використовується якась модель OOP для роботи з даними, і все ж вимагає написання коду вручну для кожної таблиці вашої бази даних, як у цьому прикладі . Я припускаю, що ви використовуєте певну генерацію коду для написання цих функцій відображення, але це, мабуть, здається непридатним.
(Зауважте, я не переглядав Веб-блоки або Посилання надзвичайно уважно, я можу просто нерозуміти, як вони використовуються).
Отже, питання полягає в тому, що для частин доступу до бази даних (які, на мою думку, є досить великими) веб-додатків, або іншої розробки, що вимагає інтерфейсу з базою даних sql, ми, здається, змушені пройти один із наступних шляхів:
- Не використовуйте функціональне програмування
- Доступ до даних набридливим, не абстрагованим способом, який включає вручну написання багатьох SQL або SQL-подібних кодів ala Посилання
- Змусимо нашу функціональну мову перетворити на псевдо-OOP парадигму, тим самим видаляючи частину елегантності та стабільності справжнього функціонального програмування.
Зрозуміло, що жоден із цих варіантів не здається ідеальним. Чи знайшов спосіб обійти ці проблеми? Чи справді тут навіть є проблема?
Примітка: Особисто я найбільше знайомий з LISP на фронті FP, тому, якщо ви хочете навести будь-які приклади та знати кілька мов FP, lisp, ймовірно, буде кращою мовою вибору
PS: Про питання, специфічні для інших аспектів веб-розробки, див. Це питання .