Каков наилучший способ построения модели представления?

Я использую asp.net mvc со структурой сущности и начинаю изучать DDD. Я работаю над проектом, который содержит опросы. Вот моя модель домена:

public class Survey
{
    public int? SurveyID { get; set; }
    public string Name { get; set; }
    public decimal MinAcceptanceScore { get; set; }
    public int UserFailsCount { get; set; }

    public IEnumerable<SurveyQuestion> Questions { get; set; }
    public IEnumerable<Prize> Prizes { get; set; }
    public IEnumerable<SurveyAttempt> UserAttempts { get; set; }
}

Мне нужны разные части опросов для разных видов, поэтому я создал разные ViewModels:

    public class ShortSurveyViewModel
    {
        public int? SurveyID { get; set; }
        public string Name { get; set; }
        public int UserFailsCount { get; set; }
        public IEnumerable<SurveyAttempt> UserAttempts { get; set; }
    }

    public class ShortSurveyWithPrizesViewModel
    {
        public int? SurveyID { get; set; }
        public string Name { get; set; }
        public int UserFailsCount { get; set; }
        public IEnumerable<SurveyAttempt> UserAttempts { get; set; }
        public IEnumerable<Prize> Prizes { get; set; }
    }

    public class SurveyEditViewModel
    {
        public int? SurveyID { get; set; }
        public string Name { get; set; }
        public decimal MinAcceptanceScore { get; set; }
        public int UserFailsCount { get; set; }

        public IEnumerable<SurveyQuestion> Questions { get; set; }
        public IEnumerable<Prize> Prizes { get; set; }
    }

Как лучше построить мою архитектуру, если я хочу, чтобы мой репозиторий получал информацию, необходимую для подходящей модели представления?

Различные решения, которые я вижу:

Репозиторий может вернуть IQueryable в SurveyService, а сервис может вернуть подходящую модель представления, но я сомневаюсь, что это правильно, потому что я считаю, что модели представления должны создаваться в пользовательском интерфейсе, а не на уровне служб.

Создайте три соответствующих класса в моем доменном слое. Но теперь домен будет зависеть от представления, и с каждым новым представлением должен быть создан новый класс домена.

Получить полный объект домена и сопоставить только свойства, которые необходимы для конкретного вида. Это не хорошо, потому что в моем примере Вопросы нужны только в одном представлении, и это может быть большой сбор.

Ответы на вопрос(2)

Ваш ответ на вопрос