Я рассматриваю интерфейсы как способ сократить поведение . Таким образом, все, что реализует этот интерфейс, должно обеспечивать выполнение любого контракта, который вы установили в интерфейсе.
Итак, я бы использовал интерфейс, только если передаваемый объект содержит поведение , которое должен использовать ваш объект. Это в основном так, что при тестировании вы можете переключить этот объект с помощью фиктивного, чтобы убедиться, что он работает правильно.
Поскольку POD не содержат поведения, я бы не стал взаимодействовать с ними. Это потому, что я не вижу никакой выгоды. Если типы данных или содержимое вашего POD изменятся, вы повсеместно будете менять, когда POD используется, независимо от того, было ли оно буферизовано интерфейсом или нет. И нет смысла издеваться над POD для тестирования, потому что макет выглядит так же, как реальная вещь.