La pregunta interesante aquí es su pregunta de los comentarios:
¿De qué objeto tendría usted que no es necesario modificar los valores en algún momento? Supongo que no es una clase modelo, ¿correcto? Tuve que cambiar el nombre de una persona en mi base de datos; esto no encaja con esta idea.
Bueno, considere las cosas que ya son inmutables. Los números son inmutables. Una vez que tienes el número 12, es 12. No puedes cambiarlo. Si tiene una variable que contiene 12, puede cambiar el contenido de la variable a 13, pero está cambiando la variable, no el número 12.
Lo mismo con cuerdas. "abc" es "abc" y nunca cambia. Si tiene una variable que contiene "abc", puede cambiarla a "abcd", pero eso no cambia "abc", que cambia la variable.
¿Qué tal una lista? {12, "abc"} es la lista que es 12 seguida de "abc", y esa lista nunca cambia. La lista {12, "abcd"} es una lista diferente .
Y ahí es donde las cosas se descarrilan. Porque en C# puedes hacerlo de cualquier manera. Puede decir que hay identidad referencial entre esas dos listas si se permite que las listas muten sus contenidos sin cambiar su identidad.
Golpeas el clavo directamente en la cabeza cuando hablas del "modelo". ¿Estás modelando algo que cambia? Si es así, entonces es posible que sea prudente modelarlo con un tipo que cambie. El beneficio de eso es que las características del modelo coinciden con el sistema que se modela. El inconveniente es que se vuelve muy complicado hacer algo así como una funcionalidad de "deshacer", donde "deshacer" un cambio.
Es decir, si muta {12, "abc"} a {12, "abcd"} y luego desea deshacer la mutación, ¿cómo lo hace? Si la lista es inmutable, simplemente manténgase cerca de ambos valores y elija cuál quiere que sea el valor "actual". Si la lista es mutable, entonces debe tener la lógica de deshacer para mantener una "función de deshacer" que sepa cómo deshacer la mutación.
En cuanto a su ejemplo específico, puede crear una base de datos inmutable. ¿Cómo cambias el nombre de alguien en tu base de datos inmutable? Tu no Crea una nueva base de datos que tiene los datos que desea. El truco con los tipos inmutables es hacerlo de manera eficiente, sin copiar miles de millones de bytes. El diseño de estructura de datos inmutables requiere encontrar formas inteligentes de compartir estados entre dos estructuras casi idénticas.
posible duplicado de [¿Cómo creo una clase inmutable?] (Http://stackoverflow.com/questions/352471/how-do-i-create-an-immutable-class) –
No es un duplicado: porque esto la pregunta es sobre la validación, no la creación. – ChrisW
Pregunto sobre validación, no creación. –