У вас должно быть три сущности:
interface MessageInterface
{
public function setUser(UserInterface $user);
public function attachFile(FileInterface $file);
}
interface UserInterface
{
.....
}
interface FileInterface
{
.....
}
И должна быть фабрика, которая умеет все это дело собрать вместе, используя MessageInterface::setUser и attachFile. В любом случае модели должны быть отдельно, а данные должны загружаться через сеттеры.
Можно сделать три фабрики и сделать немного по другому:
interface FileFactory
{
public function getFiles(MessageInterface $message)
}
Хотя такой вариант я не очень люблю. Вариант с сеттерами намного лучше.