Все дело в том, знает ли Object1 об Object2 или нет. В ООП частью хорошего дизайна является сохранение объектов в максимально возможной степени, что позволяет им вести себя должным образом. Таким образом, проблема в основном сводится к следующему: нужно ли Object1 знать о существовании Object2 (то есть нужно ли экземпляру Object2 для существования) или сообщать о существовании экземпляра Object2? Обычно в ООП вы хотите больше склоняться к последнему, чем к первому.
Однако, тем не менее, в ситуации, когда Object1 может работать с данными, поступающими из Object2, наилучшим способом, вероятно, было бы, чтобы Object1 имел метод, который работает с данными type свойства Object2 ; таким образом, вы разделяете Object1 и Object2, так как Object1 не имеет зависимость от Object2 для предоставления заданного свойства заданным способом; вызывающий код может соединить два.