Mam poważne wątpliwości co do projektu mojej aplikacji internetowej.
Chciałem oddzielić logikę biznesową od interfejsu, dlatego stworzyłem interfejs API sieci Web, który obsługuje wszystkie żądania do bazy danych.
Jest to interfejs API sieci Web ASP.NET z platformą Entity oraz jednostką pracy i ogólnym wzorcem repozytorium. Jak dotąd wszystko jest dobrze.
PROBLEM
Potrzebuję pomocy, ale nie mogę znaleźć skutecznego sposobu udostępniania obiektów między interfejsem API a aplikacją.
Nie chcę serializować bezpośrednio obiektu encji, pomyślałem, że byłoby to złą praktyką, ponieważ jeśli zmieni się model encji, mogę skończyć serializacją dużych obiektów bez powodu.
Jak to teraz zaimplementowane
Ponieważ moim interfejsem jest aplikacja sieci Web ASP.NET w języku C #, a mój interfejs API jest w języku C #, stworzyłem wspólną bibliotekę z definicją wszystkich moich klas, które chcę udostępniać między nimi.
Wiem, że to rozwiązanie nie zadziała, kiedy opracuję aplikację na Androida. Będę musiał ponownie utworzyć klasy w Javie, ale to nie jest mój największy problem.
Problem polega na tym, że mam wrażenie, że zawsze przekształcam swoje obiekty.
PRZYKŁAD
Oto przykład mojego przepływu pracy:
Zaczynam od modelu zawierającego wszystkie obiekty i adnotacje danych dla mojego formularza, a następnie użytkownik wysłałby ten model do kontrolera.
W kontrolerze muszę przekonwertować ten model na klasę we wspólnej bibliotece, a następnie wysłać ten obiekt do mojego interfejsu API.
Następnie kontroler w moim interfejsie API przechwytuje wywołanie i przekształca ten obiekt w obiekt encji, aby zaktualizować bazę danych.
Mam więc 3 klasy
- Model widoku ze wszystkimi adnotacjami danych do sprawdzania poprawności (klient)
- Wspólne klasy bibliotek do udostępniania obiektów (DLL)
- Klasy encji (API)
Mam wrażenie, że robię coś naprawdę nie tak. Czy jest coś bardziej eleganckiego? Chciałbym upewnić się, że mam dobre rozwiązanie tego problemu, zanim projekt stanie się zbyt duży.