Я использовал RoR и Castle, а не CakePHP, поэтому я буду говорить в общих чертах.
1:
То, что вы делали и то, что вы должны продолжать делать, называется «Моделирование домена» - MVC отлично подходит для этого, поскольку ваши модели становятся представлениями объектов в вашей модели домена
2:
Вы можете изменить модель портфолио и мультимедиа, чтобы вместо ссылки на идентификатор своего родителя у вас были «ObjectId» и «ObjectType» - ObjectId - это идентификатор родителя, а ObjectType - это тип. Вы не сможете автоматически связать отношения, но вместо этого сможете сделать это с помощью пользовательского кода, поэтому, чтобы получить все медиафайлы для пользователя, он становится
select * from Media where ObjectId = [userid] and ObjectType = 'User'
вместо
select * from UserMedia where UserId = [userid]
3:
да, это масштабируемый дизайн не забудьте вставить как можно больше работы по конкретным моделям в сами модели (или репозитории), чтобы она «просто работала»
4:
Возможно, но вы никогда не получите «идеальную» систему. MVC великолепен, и ваш дизайн кажется надежным для простой социальной сети. Вы без сомнения добавите такие вещи, как посты / комментарии и т. Д.