Действительно ли Базы данных и Функциональное программирование противоречат?

115
задан Community 23 May 2017 в 11:54
поделиться

4 ответа

В первую очередь, я не сказал бы, что CLOS (Система Объекта языка Common LISP) является "псевдо-OO". Это - первый класс OO.

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

Вы не можете statelessly хранить данные, в то время как функция является потоком данных и не действительно должна указывать.

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

43
ответ дан Svante 24 November 2019 в 02:24
поделиться

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

При рассмотрении доступа к базе данных существует три основных соображения - целостность данных (почему все бизнес-правила должны быть осуществлены на уровне базы данных не через пользовательский интерфейс), производительность и безопасность. SQL записан для управления первыми двумя соображениями эффективнее, чем какой-либо язык фронтэнда. Поскольку это специально предназначено, чтобы сделать это. Задача базы данных является сильно отличающейся, от задачи пользовательского интерфейса. Это - какое-либо удивление, что тип кода, который является самым эффективным при управлении задачей, концептуально отличается?

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

я не попытался бы записать T-SQL или использовать понятия проектирования баз данных для создания пользовательского интерфейса, почему Вы попытаетесь использовать свой интерфейсный язык и концепции проекта для доступа к моей базе данных? Поскольку Вы думаете, что SQL не является необычным (или новым), достаточно? Или Вы не чувствуете себя довольными им? Просто, потому что что-то не соответствует модели, с которой Вы чувствуете себя больше всего комфортно, не означает, что это плохо или неправильно. Это означает, что это отличается и вероятно отличается по законной причине. Вы используете различный инструмент для различной задачи.

78
ответ дан Alex R 24 November 2019 в 02:24
поделиться

Я не думаю, что природа не сохраняющая состояние fp языков является проблемой с соединением с базами данных. Lisp является нечистым языком функционального программирования, таким образом, он не должен иметь никакой проблемы при контакте с состоянием. И чистые языки функционального программирования как Haskell имеют способы иметь дело с вводом и выводом, который может быть применен к использованию баз данных.

От Вашего вопроса кажется, что Ваша основная проблема заключается в нахождении хорошего способа абстрагировать далеко основанные на записи данные, которые Вы возвращаете от своей базы данных во что-то, что является шепелявостью-y (выход шепелявости?), не имея необходимость писать много кода SQL. Это больше походит на проблему с инструментами/библиотеками, чем проблема с парадигмой языка. Если Вы хотите сделать, чистый FP, возможно, шепелявит, не правильный язык для Вас. Язык Common LISP кажется больше об интеграции хороших идей от oo, fp и других парадигм, чем о чистом fp. Возможно, необходимо использовать Erlang или Haskell, если Вы хотите пойти чистым путем FP.

я действительно думаю, что 'pseudo-oo' идеи в шепелявости имеют свою заслугу также. Вы могли бы хотеть испытать их. Если они не соответствуют способу, которым Вы хотите работать со своими данными, Вы могли бы попытаться создать слой сверху Weblocks, который позволяет Вам работать со своими данными путем, Вы хотите. Это могло бы быть легче, чем запись всего самостоятельно.

Правовая оговорка: я не эксперт Lisp. Я главным образом интересуюсь языками программирования и играл с Lisp/CLOS, Схемой, Erlang, Python и небольшим количеством Ruby. В ежедневной жизни программирования я все еще вынужден использовать C#.

15
ответ дан Mendelt 24 November 2019 в 02:24
поделиться

Нисколько. Существует жанр баз данных, известных как 'Функциональные Базы данных', из которых Mnesia является, возможно, самым доступным примером. Основной принцип - то, что функциональное программирование декларативно, таким образом, оно может быть оптимизировано. Можно реализовать соединение с помощью , Понимания Списка на персистентных наборах и оптимизаторе запросов могут автоволшебно разработать, как реализовать доступ к диску.

Mnesia записан в Erlang и существует по крайней мере одна веб-платформа ( Erlyweb) доступна для той платформы. Erlang по сути параллелен с общим - ничто модель потоков, таким образом, определенными способами это предоставляет себя масштабируемым архитектурам.

13
ответ дан ConcernedOfTunbridgeWells 24 November 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: