Фраза 'выводится' - это значит у вас есть методы, которые занимаются преобразованием данных объектов в представление (html например), это либо часть сущностей user/event/.. (т.е. каждая сущность умеет себя выставлять на показ) либо отдельная сущность, которая знает про все существующие и умеет их рисовать.
Собственно это ответ на ваш вопрос - ваша реализация будет гулять между этими крайностями.
Но когда речь идет об использовании данных, т.е. если вдруг для работы одной сущности нужна часть данных из другой, т.е. к примеру event должен знать дату рождения пользователя чтобы уметь добавлять ДР в календарь, то либо вы должны создать некую абстрактную сущность-посредник, умеющий выдавать дополнительные даты для календаря и знающий откуда их можно брать (и про user и имеющий методы, о которых знает event), либо забить связь между сущностями в код (прописать методы дат у user и напрямую запрашивать, т.е. в методе user необходимо прописать доступ к объектам типа user, точнее класс потом к для всех видов user).