Si pasa referencias de objetos y esas referencias no se modifican, cualquier cambio realizado en el objeto en una capa de persistencia será instantáneamente visible para cualquier otro consumidor del objeto. Sin embargo, si su objeto está cruzando un límite de servicio, los ensamblajes en cada lado del objeto verán diferentes objetos que son solo copias de carbono. Además, si ha creado clones del objeto o ha creado tipos anónimos que incorporan propiedades del objeto original, será difícil rastrearlos y, por supuesto, para el GC estos son objetos nuevos que no están relacionados con el objeto. objeto original.
Si tiene algún tipo de clave o ID en el objeto, entonces es más fácil. La clave no tiene que ser una ID de base de datos, puede ser un GUID que se actualiza cuando se crea una instancia del objeto, y no se cambia durante todo el ciclo de vida del objeto (es decir, es una propiedad que tiene una getter pero no setter) - ya que es una propiedad que persistirá a través de los límites del servicio, por lo que su objeto seguirá siendo identificable. A continuación, puede usar LINQ o incluso bucles pasados de moda (¡repulsivo!) Para iterar a través de cualquier colección que pueda contener una copia del objeto actualizado, y si se encuentra uno puede fusionar los cambios nuevamente.
Habiendo dicho esto, no creo que tengas demasiadas copias flotando. Si lo hace, los lugares donde están estas copias deben estar muy localizados. Asegurarse de que su objeto implemente INotifyPropertyChanged también ayudará a propagar las notificaciones de cambios si mantiene una lista en un lugar que luego se verá directa o indirectamente en otros puntos.
Sí, podría usar un patrón similar al de un Flyweight. http://en.wikipedia.org/wiki/Flyweight_pattern – Josh
+1. Como Vlad ha señalado, una manera fácil es introducir un nivel más de indirección. (@Josh: ¿Estás seguro de que * Flyweight * es la terminología adecuada aquí?) –
@andras, en el ejemplo de GoF que usa los glifos de un editor de texto como un ejemplo, puede parecer extraño. Pero si lo que quiere decir Vlad es tener un objeto de datos "pesado" que contiene los datos y un montón de otros objetos de "enlace" que hacen referencia a esto, sí, creo que sería muy similar a la intención de un peso mosca. Aunque el ahorro de espacio no es la principal motivación aquí. – Josh