Currently it is possible for a configured object to be defined as having multiple parents (of different classes)
Thus a binding has a "queue" parent and an "exchange" parent, a consumer has a "session" parent and a "queue" parent, a virtualhostalias has a "port" parent and a virtialhost parent.
This design should be changed.
Bindings should have a single exchange parent with the queue being an attribute (note that this probably also requires adding binding-key as an attribute and setting the name to queue/binding-key or some such. Exchange-wide validation on the binding-key will be required)
Since in AMQP 1.0 a link endpoint may outlive the session that created it, it makes sense for the parent of the Consumer to be the Queue. The Session will be a (derived) attribute of the Consumer.
The primary parent of the virtualhostalias should be the (amqp) port. The virtualHost should be an attribute. On creating a VirtualHost we should offer to create an alias for the virtual host on all existing ports with the host name as the alias. On creating a port we should offer to create aliases for each of the existing virtualhosts.