Szerintem tulbonyolitod a dolgot. Kezdve azzal, hogy az egesz OOP koncepciot erosen el-erodalta a dependency injection es a funkcionalis programozas felivelese. Ma mar senki se csinal bonyi design pattern-eket, mert a tobbseguk obsolete lett azota.
Amit en szoktam csinalni es IMHO a legjobb: szeparalni az adatot es a logikat. Az adat class -ban csak adat legyen (ez lehet immutable is ekkor, az a legtisztabb), mig a kulonbozo logic class-ok vegzik a muveleteket az adaton. Ez utobbiak egymast egymasnak DI-zik igeny szerint. Az adat class-ok meg a kulonbozo DI contexteket is felvehetnek (global, session, request).
Ilyenkor az adat class tiszta (en getter/settert se rakok bele, csak public final field-eket), a logic meg siman keszit uj adat class instance-t. A fenti kerdes tehat moot, mert siman igy nezne ki:
new = logic.copyProperty(new, old);
logic.removeProperty(old);