Vanilla "struct" data in members, plus reference pointers to data held caches of a database/memcached system are a pretty powerful way to work. You tend to not do assignment because making extra copies of stuff that's persistent has bad semantics; it will hurt a lot if you (say) have six copies of a Person and two or three pieces of code decide to do uncoordinated updates.