Oddzielenie warstw logiki w aplikacji WPF

Oddzielenie warstw logiki w aplikacji WPF
lukaszek016
  • Rejestracja:około 9 lat
  • Ostatnio:ponad rok
  • Postów:249
0

Witam.

Piszę aplikację WPF. Potrzebuję małej porady.

Podam na przykładzie kontrolki z widokiem na listę klientów.
Mam plik widoku z DataGrid. Tam mam zbindowane do właściwości ObservableCollection<ClientsForList>.
I teraz tak, pobieram tą listę używając wstrzykniętej z unity implementacji IClientService, gdzie wywołuję metodę GetAllClients.
W tej metodzie mam pobieranie z bazy listy obiektów typu Client. Klasa Client jest to encja dla EntityFrameworka. Może przedstawię kod tej metody GetAllClients:

Kopiuj
public List<ClientForList> GetAllClientsForList()
        {
            var clients = db.Clients.ToList();
            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap<Client, ClientForList>();
            });
            IMapper mapper = config.CreateMapper();
            return mapper.Map<List<Client>, List<ClientForList>>(clients);
        }

Czy to jest w miarę ok? Teoretycznie mógłbym wystawić do ViewModelu i dalej do widoku obiekty Client, ale z tego, co wiem to tak się nie robi. Pytanie czy ja to tutaj dobrze zaimplementowałem. Chodzi mi głównie o to, że mapowanie obiektów jest w serwisie. I dodam, że klasa ClientForList ma sporo mniej pól niż klient, bo nie chciałem, aby mi w tabeli w widoku wszystko wyświetlało.

neves
  • Rejestracja:prawie 22 lata
  • Ostatnio:około 18 godzin
  • Lokalizacja:Kraków
  • Postów:1114
1
Kopiuj
  class ClientService : IClientService
	{ 
		private static readonly IMapper Mapper; 
		
		
		static ClientService()
        {
            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap<Client, ClientVM>();
            });
            Mapper = config.CreateMapper();
        }
	
	
        public List<ClientVM> GetAllClients()
        {
            var clients = db.Clients.ToList();            
           
            return Mapper.Map<List<ClientVM>>(clients);
        }
	}

A tak pzt to AutoMapper to zło, niech żyje Mapping Generator!


edytowany 1x, ostatnio: neves
grzesiek51114
grzesiek51114
AutoMapper to zło noo, ja też nie lubię. To z linka jest świetne!
somekind
Świetne, jeśli komuś płacą od linijki kodu.
lukaszek016
  • Rejestracja:około 9 lat
  • Ostatnio:ponad rok
  • Postów:249
0

Chętnie zobaczę, bo w sumie AutoMappera pierwszy raz używam.

Dzięki za poprawki w kodzie. Co prawda to nie była wersja ostateczna, tylko tak na szybko napisałem, aby zobaczyć czy działa to tak, jak myślę.

Ale generalnie idea rozmieszczenia poszczególnych warstw w aplikacji może być? W sumie więcej pytań niż odpowiedzi. Teraz też zastanawiam się nad tym, iż podwójne kliknięcie na element w DataGrid powoduje wyświetlenie wszystkich szczegółów obiektu. Czyli wychodzi na to, że muszę mieć i tak pole Id w moim obiekcie ClientVM.

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.