Должен ли я представлять данные базы данных с помощью неизменяемых или изменяемых структур данных?

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

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

После курсов Scala Мартина Одерского на Coursera, я помню, он сказал что-то вроде:

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

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

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

3 ответа

Решение

"Взаимодействие с реальным миром" не имеет ничего общего с тем, используете ли вы изменяемые или неизменяемые структуры данных. Это меха, который повторяется слишком часто, и это здорово, что вы его подвергли сомнению.

Хотя обычно избавляться от мусора, как это, обычно более полезно, вас может заинтересовать краткий разбой: http://blog.higher-order.com/blog/2012/09/13/what-purity-is-and-isnt/

Тем не менее, я настоятельно рекомендую отказаться от этого и двигаться дальше.

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

http://dropbox.tmorris.net/media/doc/lenses.pdf

Надеюсь, это поможет.

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

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

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

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

Наш опыт показывает, что это значительно упростило нашу работу с моделью, включая постоянство.

Я пока не понимаю, почему все стало проще, просто так. Мне нужно больше обдумать это. Рассуждать о коде и работать с ним проще.

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

Другие вопросы по тегам