I would also think about adding an accept method to the Hydrator class, this could be used instead of accessing the compositeFilter in the hydrator's extract method, `if ($this->accept($property, $context))` which makes the hydrator method easier to mock out? Also similar suggestion for `$this->namingStrategy->getNameForExtraction($property, $context)`, would be `$this->nameForExtraction($property, $context)`. I would consider having traits for those two interfaces and use them in the hydrator class to provide the two suggested methods which means testing the Hydrator does not include tests related to the other two components - since those traits are for those components and would have their own tests.