Интересным вопросом здесь является ваш вопрос из комментариев:
Какой тип объекта у вас есть, чтобы вам не нужно было изменять значения в какой-то момент? Я предполагаю, не класс модели, правильно? Мне пришлось изменить имя человека в моей базе данных - это не соответствует этой идее.
Хорошо, рассмотрим вещи, которые уже неизменны. Числа неизменны. Как только у вас есть номер 12, это 12. Вы не можете изменить его. Если у вас есть переменная, которая содержит 12, вы можете изменить содержимое переменной на 13, но вы изменяете переменную , а не число 12 .
То же самое со строками. «abc» - это «abc», и он никогда не меняется. Если у вас есть переменная, которая содержит «abc», вы можете изменить ее на «abcd», но это не изменит «abc», это изменит переменную.
А как насчет списка? {12, «abc»} - это список, за которым следует 12, за которым следует «abc», и этот список никогда не меняется. Список {12, "abcd"} представляет собой другой список .
И вот тут-то и рельсы. Потому что в C # вы можете сделать это в любом случае. Вы можете сказать, что между этими двумя списками есть ссылочный идентификатор , если спискам разрешено изменять свое содержимое без изменения их идентификатора.
Вы ударяете гвоздь прямо по голове, когда говорите о «модели». Вы моделируете что-то, что меняется? Если это так, то, возможно, целесообразно смоделировать его с изменяющимся типом. Преимущество этого заключается в том, что характеристики модели соответствуют моделируемой системе. Недостатком является то, что становится очень сложно сделать что-то вроде «отката», когда вы «отменяете» изменения.
То есть, если вы изменили {12, "abc"} на {12, "abcd"}, а затем хотите откатить мутацию, как вы это сделаете? Если список неизменен, вы просто сохраняете оба значения и выбираете, какое из них вы хотите использовать в качестве «текущего» значения. Если список является изменяемым, то вы должны иметь логику отмены, сохраняющую «функцию отмены», которая знает, как отменить мутацию.
Что касается вашего конкретного примера, вы, безусловно, можете создать неизменяемую базу данных. Как вы меняете имя человека в вашей неизменной базе данных? Вы не Вы создаете новую базу данных, в которой есть нужные вам данные. Хитрость в неизменяемых типах заключается в том, чтобы делать это эффективно, не копируя миллиарды байтов. Конструкция неизменяемой структуры данных требует поиска умных способов разделения состояния между двумя почти идентичными структурами.