Nếu bạn đang đi qua tham chiếu đối tượng xung quanh và những tài liệu tham khảo đối tượng vẫn không thay đổi, sau đó bất kỳ thay đổi thực hiện cho các đối tượng trong một lớp kiên trì sẽ ngay lập tức hiển thị cho mọi người tiêu dùng khác của đối tượng. Tuy nhiên, nếu đối tượng của bạn vượt qua ranh giới dịch vụ thì các hội đồng ở mỗi bên của đối tượng sẽ xem các đối tượng khác nhau chỉ là bản sao carbon. Ngoài ra nếu bạn đã tạo bản sao của đối tượng hoặc đã tạo các loại vô danh kết hợp các thuộc tính từ đối tượng ban đầu, thì những thứ đó sẽ khó theo dõi - và dĩ nhiên với GC, đây là các đối tượng mới không có liên kết với đối tượng gốc.
Nếu bạn có một số loại khóa hoặc ID trong đối tượng thì việc này trở nên dễ dàng hơn. Chìa khóa không phải là một ID cơ sở dữ liệu, nó có thể là một GUID được tạo mới khi đối tượng được khởi tạo, và không được thay đổi cho toàn bộ vòng đời của đối tượng (nghĩa là nó là một thuộc tính có một getter nhưng không có setter) - vì nó là một thuộc tính nó sẽ tồn tại trên các ranh giới dịch vụ, do đó đối tượng của bạn sẽ vẫn có thể nhận dạng được. Sau đó, bạn có thể sử dụng LINQ hoặc thậm chí các vòng lặp cũ (icky!) Để lặp qua bất kỳ bộ sưu tập nào có khả năng chứa một bản sao của đối tượng được cập nhật và nếu tìm thấy nó, bạn có thể hợp nhất các thay đổi đó lại.
Có nói điều này, tôi sẽ không nghĩ rằng bạn có quá nhiều bản sao trôi nổi xung quanh. NẾU bạn làm thì những nơi mà các bản sao này nên được bản địa hóa rất nhiều. Đảm bảo rằng đối tượng của bạn thực hiện INotifyPropertyChanged cũng sẽ giúp tuyên truyền các thay đổi nếu bạn giữ một danh sách ở một vị trí mà sau đó bị ràng buộc trực tiếp hoặc gián tiếp ở một số điểm khác.
Có, bạn có thể sử dụng một mẫu tương tự như của một Flyweight. http://en.wikipedia.org/wiki/Flyweight_pattern – Josh
+1. Như Vlad đã chỉ ra, một cách dễ dàng là để giới thiệu thêm một mức độ bất định. (@Josh: Bạn có chắc rằng * Flyweight * là thuật ngữ thích hợp ở đây không?) –
@andras, trong ví dụ GoF sử dụng glyphs của trình soạn thảo văn bản làm ví dụ có vẻ lạ. Nhưng nếu Vlad nghĩa là có một đối tượng dữ liệu "nặng" chứa dữ liệu và một loạt các đối tượng "liên kết" khác tham chiếu đến điều này, vâng tôi nghĩ rằng nó sẽ rất giống với ý định của một con ruồi. Mặc dù tiết kiệm không gian không phải là động lực chính ở đây. – Josh