Aplikacja 3-warstwowa, gdzie umieścić ViewModel

Aplikacja 3-warstwowa, gdzie umieścić ViewModel
M0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 373
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

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

oraz model

Kopiuj
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

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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.

M0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 373
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?

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
2

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.