2012-07-18 5 views
7

Mam aplikację MVC z "M", w tym warstwy usług i repozytorium.Kontroler -> Usługa -> Repozytorium: Czy usługa mapuje obiekt do ViewModel?

Jestem jednak trochę zdezorientowany co do tego, gdzie i jak zrobić kilka rzeczy.

  1. jedną usługę dzwoniąc dwa repozytoria, albo nazywając swój własny magazyn i inna usługa

np

Mam ReferenceDataService, która obsługuje wszystkie logiki dla CRUD z moich tabel referencyjnych.

Następnie w mojej "CustomerService" potrzebuję "R" moje dane referencyjne, aby uzyskać np. Opis zamiast identyfikatora. Czy więc nazywam ReferenceDataService lub ReferenceDataRepository?

  1. Na niektórych warstwach chciałbym mapować z Entity do ViewModel.

Czy robię to w warstwie serwisowej lub w kontrolerze?

np. Czy moja usługa ServiceLayer wykonuje odwzorowanie/logikę z VM do Entity iz powrotem?

Dzięki :)

Odpowiedz

22
  • Repozytoria rozmawiać o źródle danych.
  • Warstwa usługi rozmawia z repozytoriami z modelami domen. Odbiera/przenosi modele domen z/do warstwy repozytorium.
  • Kontroler rozmawia z warstwą usługi. Kontroler przyjmuje/przekazuje modele domen z/do warstwy usługi.
  • Warstwa odwzorowania wywołań kontrolera (jeśli istnieje) do mapowania między modelami domen i modelami widoków. Jeśli nie masz warstwy odwzorowania, możesz wykonać mapowanie w kontrolerze, chociaż może to szybko stać się kłopotliwe, w takim przypadku AutoMapper może służyć jako bardzo przydatna warstwa odwzorowania.

Innym prostszym scenariuszem jest sytuacja, w której nie potrzeba warstwy usługowej, co często ma miejsce w mniejszych aplikacjach. Warstwa usług nie przynosi żadnych korzyści. Tak więc kontroler rozmawia bezpośrednio z repozytoriami za pomocą modeli domen.

+0

+1 - Niesamowite odpowiedzi jak zawsze ...! – bhuvin

+0

Thx :) Wydaje mi się, że mogę usunąć moją warstwę usługi ... w mojej aplikacji jest to bardzo mało użyteczne i zawarłem ją tylko dlatego, że "pasuje do wzorca". Doh! – BlueChippy

5

ViewModel zawiera dane wymagane do wyświetlenia modelu w widoku. Jeśli użyjesz innego widoku (np. Aplikacji mobilnej lub aplikacji komputerowej, a nawet usługi internetowej), będziesz potrzebować kolejnych danych do wyświetlenia. Jeśli wykonasz odwzorowania na warstwie usługi, nie będziesz mógł używać go z innym typem aplikacji. W ten sposób kontroler jest miejscem, w którym mapujesz dane domeny, aby wyświetlać je w widoku (niezależnie od tego, jaki masz widok).