|
I can't say I've seen an equivalent design either, but I had particular objectives that eventual led to the approach.
It was always intended that the client/server interface would be minimal and simple, and potentially compatible with other languages and environments. To that end, I wanted to support XML-RPC and JSON-RPC protocols. To ease the implementation of those protocols, I wanted data objects that could be easily transformed into those object formats.
Additionally, I wanted to be able to dynamically map object fields to database columns for load/save operations. The resulting design lends itself to this use.
I wanted the objects to have flexibility to store read/write permission on all of their fields.
And I needed objects that provided deep-equals and cloneability.
Ultimately, the implementation could be described as semi-dynamic/semi-static data objects. I enjoy the flexibility of high-level interpreted languages, but also appreciate compile-time checking, and tried to come up with a powerful data object that satisfied my needs, and provided relative simplicity in adding fields and creating new object types.