Oddzielenie warstw logiki w aplikacji WPF

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:

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.

1
  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!

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.

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