Представьте, что у меня есть абстрактная модель "FriendEvent", которая имеет несколько разных конкретных реализаций, т.е. FriendPosted, FriendCommented, FriendUploadedPhoto и т. Д. Все они должны отображаться в моем представлении FriendEvents, но должны визуально отличаться друг от друга (например, FriendUploadPhoto должен содержать эскиз).
Что такое хороший объектно-ориентированный шаблон для достижения этой цели?
Мне интересно узнать, есть ли альтернатива включению конкретного класса модели в коде представления. Это почему-то кажется неправильным, потому что в нем используется условная логика, в которой, как я полагаю, можно полагаться на полиморфизм, но мне трудно придумать лучшую идею. Существуют ли какие-либо закономерности для решения этой проблемы?
(Я, очевидно, не хочу реализовывать логику представления в модели, поскольку это будет смешивать обязанности, и, поскольку я могу захотеть иметь разные представления для каждой модели)
Чтобы уточнить: как моделировать различные типы событий на уровне модели, это не проблема. Существует несколько хорошо известных ОО-решений. Вопрос касается кода представления, который отвечает за визуальное представление моделей. Я предполагаю, что у меня есть класс EventView, который имеет дело с отображением события (модели). Вопрос в том, как реализовать этот класс без блока переключателей, который выбирает другой путь к коду в зависимости от конкретного типа события.