Witam,
Zaczynam przygodę z angular2 i mam małe pytanie czy myślę w dobym kierunku czy jednak jest to za duży mix i pójść prostsza drogą.
(( obsługę wyjątków i błędów ominąłem aby skrócić kod))
Chciałbym wiedziec czy tak to się robi czy za dużo kombinuję i lepiej to skrócić że np. component będzie miał injected repo i dostęp do funkcji cruda.
Programuję hobbistycznie więc proszę o wyrozumiałość :D (chciałbym pracować nawet jako junior ale boję się że mam za małą wiedzę)
Back-end to api które piszę w Asp.net core2
Na razie napisałem tak: (Na przykładzie pobierania wszystkich użytkowników z back-endu)
Mam klase abstrakcyjną:
Repository<T extends MyItems>
z funkcjami CRUD np:
getAll() : Observable<T[]>
{
return this.http.get(
`${this.url}/${this.endpart}`, this.auth.getHeader()).pipe(map((data: any) => data.json() as T[]));
}
Od niej tworzę klasę repo dla np modelu User: (takie repo mogę powiększyć o funkcje wymagane w konkretnym przypadku/modelu)
export class UsersRepository extends RepositoryService<User>
Następnie mam klasę service która ma dostęp do repo. np. Users.service.ts (tutaj dane odebrane z repo (User[]) będą mapowane na UserDto[] i odbierane w component:
getAll() {
return new Promise(resolve=> {
this.usersRepo.getAll().subscribe(
data => {
var userDtos: UserDto[] = [];
data.forEach(
(user) =>
{
// mapowanie będzie docelowo lepiej rozwiązane ale narazie nie posiadam wiedzy żeby to zrobić
userDtos.push(<UserDto> { id: user.id, username : user.username, email : user.email });
})
resolve(userDtos);
})
})
}
Dane odbierane i przetwarzane są przez component i dalej przekazane do template: (tutaj przykład jakby to miało wyglądać):
getAllUsers()
{
var userDtos: UserDto[] = [];
this.usersService.getAllTmp().then(
(data:UserDto[]) => {
if(data.length > 0) {
data.forEach(
(user) =>
{
console.log("name: " + user);
})
}})
}
modele: (User.model.ts oraz UserDto.model.ts) skrócone do minimum.
//User
export class User extends MyItems
{
username: string;
email: string;
password: string; // never stored used when request login/register
token: string;
}
//UserDto
export class UserDto extends MyItems
{
id: number;
username: string;
// UserDetails here
}
Myślałem żeby klasy UserService itp również zrobić jako generic<T> z dodatkową serializacją modeli z Model -> Dto.
Tylko nie wiem czy nie za duzo kombinuje "na około"...
Z góry dziękuję za podpowiedzi i nakierowanie w odpowiednim kierunku :D