Some D-Bus thoughts.
Don't use duplicate method/property/signal names on objects
D-Bus implementations in dynamic languages can make use of D-Bus Introspection and create local proxy objects that reflect the remote object in an object-oriented way. This only works if D-Bus follows the language limitations that are the same for most languages.
Don't use different D-Bus interfaces for different object types
It's useless, especially for derived types. Think of D-Bus interfaces as of just ordinary namespaces. Usually, one is enough for the whole application.
Use D-Bus service name (busname) also as interface name
Keep things simple. See above.