Aplikacja 3-warstwowa, gdzie umieścić ViewModel

0

W aplikacji mam 3 warstwy. 1-Dostęp do bazy, 2-Model oraz 3-Widok. Wszystko w osobnych projektach. Chciałbym, aby poszczególne warstwy wiedziały o innych jak najmniej.
Dla przykładu mam

public class TagViewModel
{
    public int ID { get; set; }
    public string Name { get; set; }
}

oraz model

public List<TagViewModel> ListTags()
{
   return tagRepository.GetAll.Select(x => new TagViewModel
   {
      ID = x.ID,
      Name = x.Name
    })
    .ToList();
}

W widoku wywołuje sobie tylko interfejs z metodą,

TagViewModel ora model mam umieszczony w 2 warstwie, aby widok dostał już gotowe dane i nie musiał wiedzieć o model i encjach w 1 warstwie.
Tylko mam wątpliwości co do poprawności takiego zapisu. Dodając WebAPI co prawda miałbym już gotowe ViewModele.

I teraz moje pytanie, jeżeli moje podejście jest złe, to jak właściwie powinienem rozwiązać ten problem?

Ups coś popsułem i post wysłałem

2

Twoje podejście ze zwracaniem ViewModeli z aplikacji jest ok.
Błędna jest tylko ta wyciekająca abstrakcja z repozytorium (projekcja na ViewModel) i materializacja (wołanie ToList) w modelu.

0
somekind napisał(a):

Błędna jest tylko ta wyciekająca abstrakcja z repozytorium (projekcja na ViewModel) i materializacja (wołanie ToList) w modelu.

Mógłbyś rozwinąć jak miałbym to zrobić poprawie?

2

Zwracać IEnumerable<TagViewModel>, a na pewno nie IQueryable<>.

1 użytkowników online, w tym zalogowanych: 0, gości: 1