2017-12-15 35 views
0

각도 4, 5로 속도를 높이고 JSON 응답을 강력한 형식화 된 객체/모델에 매핑하는 것이 가장 좋은 방법인지 궁금합니다.모델에 대한 매핑 매핑 - 모범 사례

서비스 :

getUsers(): Observable<User[]> { 
    return this.http.get<User[]>('http://localhost:8000/users/') 
    .pipe(
     tap(users => this.log(`fetched users`)), 
     map(response => { 
     return response.map((res) => 
     { 
      return new Hero(
      response['username'], 
      response.email); 
     }); 
     }), 
     catchError(this.handleError('getUsers', [])) 
    ); 
} 

인터페이스/모델 :

export interface IUser { 

    id: number; 
    name: string; 
    email: string; 
} 

export class Hero implements User { 

    public id: number; 

    constructor(public name: string, 
      public email: string) { 

    } 
} 

getUsers 반환 사용자 개체가있는 관찰 가능한 배열입니다. username은 해당 객체의 멤버가 아니므로 점 표기법에 오류가 있으므로이 괄호 표기법을 사용합니다. 필자는 결국 Map 함수를 테스트 가능성/명확성을위한 별도의 함수로 가져갈 것입니다.

이 매핑/매핑/변환을 올바르게 처리하는 방법은 무엇입니까?

+0

'return response' – Aravind

+0

으로 직접 인터페이스에 타입 변환 할 수 있습니다.'map (response => return 응답)'을 의미합니까? 그러면'username'은'name'에 어떻게 매핑됩니까? 그 간단한 예제에서 기본적으로 내 질문. –

답변

0

너무 많은 문제가 있습니다.

export interface IUser { 
    id: number; 
    username: string; 
    email: string; 
} 

getUsers(): Observable<User[]> { 
    return this.http.get<User[]>('http://localhost:8000/users/') 
    .catch(err => this.handleError('getUsers', [])); 
} 

여기에 답장이 입력됩니다.

Typescript를 개발 도움말으로 참조하십시오. 코딩하는 동안 클래스 등을 사용하는 것은 매우 유용하지만, 일단 애플리케이션을 빌드하면 모든 것이 자바 스크립트로 컴파일되므로 모든 클래스와 속성이 "손실"됩니다.

너무 많이 생각해서는 안됩니다. 가장 간단한 방법을 선택하면 효과가 있습니다. 그렇지 않으면 오류가있는 곳을 알려주는 TS 린터가 여전히 있습니다!

+0

이것은 좀 더 복잡한 것의 아주 간단한 예입니다. FE에서는 다른 속성 이름을 가진 RESTful API입니다. 그러나 나는 당신을 이해하고 동의합니다. 나는 매핑을위한이 모범 사례 구현을 찾고 있습니다. –

+0

"매핑을위한 최상의 구현"은 없습니다. ** 데이터를 변경해야 할 때 매핑을 사용합니다 **. 모든 통화에서 모델에 맞게 응답을 매핑해야하는 경우 ** 모델을 응답 모델 **에 맞게 변경하십시오. 'get '와'Observable '함수를 호출하면됩니다. 그렇지 않으면, 당신처럼 당신은 새로운 요소를 instanciate 필요가 없습니다. 이는 시간, 자원 및 코드 줄을 낭비하는 것입니다. – trichetriche