Używam asp.net mvc ze strukturą encji i zaczynam uczyć się DDD. Pracuję nad projektem, który zawiera ankiety. Oto mój model domeny:Jaki jest najlepszy sposób na zbudowanie modelu widoku?
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; }
}
muszę różne części badań dla różnych widoków, więc stworzyliśmy różne 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; }
}
Jaki byłby najlepszy sposób na budowanie mojego architekturę, jeśli chcę mój repozytorium ankiet w celu uzyskania informacji potrzebnych do modelu podglądu aproperty?
Różne solusions które widzę:
Repository może powrócić IQueryable do SurveyService i serwisu może powrócić widoku modelu appropriete, ale waham się, że robi to w porządku, ponieważ myślę, zobacz modele powinny być tworzone w interfejsie , a nie warstwa Service.
Utwórz trzy odpowiednie klasy w mojej warstwie domeny. Ale teraz domena będzie zależna od reprezentacji i przy każdym nowym widoku powinna zostać utworzona nowa klasa domeny.
Pobierz pełny obiekt domeny i odwzoruj tylko właściwości potrzebne dla określonego widoku. To nie jest dobre, ponieważ na moim przykładzie pytania były potrzebne tylko w jednej reprezentacji i może to być duża kolekcja.
Użyj widoki częściowe –
ViewModels powinien żyć w interfejsie użytkownika i zostać zapełniony w kontrolerze. DAL i warstwy domeny nie powinny o nich wiedzieć –
@DaveA Będę używał częściowych widoków, ale pytanie nie dotyczy tego. Pytam o optymalny sposób budowania moich modeli widoków. –