* Almost no code should know concrete instances of
serializers.
Program against the interfaces. Ie, when the constructor of a
serializer for a higher level object (ie SnakSerializer) takes a
collaborator for a lower level one (ie DataValueSerializer), type hint
against the interface (ie "Serializer $dataValueSerializer").
Hmm, this causes some other design issues. We will have a SnakSerializer
which has to take a $dataValueSerializer. Of course we should not
specify a concrete type because of flexibility, but a problem of this
solution is that wrong Serializers that cannot handle DataValues will
only throw an exception at runtime but do not show a warning when
"compiling". Do you have any suggestions how we can avoid those issues?
Best regrads,
Bene*