Помимо очевидных причин (таких как предотвращение дублирования кода путем работы с различными типами данных), существует этот действительно крутой шаблон, который называется дизайном на основе политик. Я задал вопрос о политиках против стратегий .
Теперь, что такого изящного в этой функции. Представьте, что вы пишете интерфейс для использования другими. Вы знаете, что ваш интерфейс будет использоваться, потому что это модуль в своем домене. Но вы еще не знаете, как люди будут его использовать. Дизайн на основе политик усиливает ваш код для повторного использования в будущем; это делает вас независимым от типов данных, на которые опирается конкретная реализация. Код просто «вкрадывается». : -)
Черты сами по себе прекрасная идея. Они могут прикрепить определенное поведение, данные и типизированные данные к модели. Черты позволяют полную параметризацию всех этих трех полей. И самое главное, это очень хороший способ сделать код многократно используемым.