Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Data em Angular - Typescript

Possuo um backendem Java, JAX-RS(Wildfly 13) com Jackson . A maioria esmagadora das minhas entidades possuem campos de data, utilizo LocalDate e LocalDateTime, por esse fato, acabei criando Serializers e Deserializers no Jackson pra poder trafegar os JSONs do backend pro frontend e vice e versa.

Data serializada: 1541351240309
Data deserializada: '2018-11-04 15:07:35'

Acontece que meu frontend, que é em Angular, ao receber essa data, não recebe um objeto do tipo javascript Date, visto que é um miliseconds, pra eu ter acesso ao objeto do tipo Date, preciso criar uma classe TypeScript e um parser pra receber o miliseconds e transformar em um Date. Fiz da seguinte maneira:

Recebo no Front o seguinte JSON:

{
    name: 'Name',
    birthday: 1541351240309
}

recebo no serviço e faço um parser pra uma classe com o tipo Date da seguinte maneira:


export class Person {

    private name: string;
    private birthday: Date;

    constructor(name:string, birthday: Date){
        this.name = name;
        this.birthday = birthday;    
    }

}

export class PersonJsonParser {

    getPersonByJson(personJson){
        return new Person(
            personJson.name,
            new Date(personJson.birthday)
        );
    }

}

//no meu service, utilizo da seguinte maneira;

export class PersonService {

    constructor(private http: HttpClient,
        private personJsonParser: PersonJsonParser){
    }    

    getPerson(){
        this.http.get<Person>(...)
            .pipe(map(personJson => this.personJsonParser.getPersonByJson(personJson)))
    }

}

Acontece que essa solução que desenvolvi achei muito verbosa, visto que em basicamente todas as minhas requisições preciso estar fazendo esses pipe(map) e criando esses JsonParsers. Já virou até um padrão do meu projeto.

Gostaria de saber se essa é a melhor solução ou se existe uma solução melhor de resolver esse problema com datas.

Tenho liberdade de tanto alterar a abordagem utilizada no backend como no frontend.

3 respostas

Não se preocupe muito se o código está com muitas palavras. Se preocupe mais com o tempo de resposta, se isso está deixando a execução lenta então mude, se não está deixando lento então eu não vejo o porque de não utilizar.

O problema não é ter muitas palavras, só gostaria se não existe uma maneira melhor de resolver essa situação.

Não existe melhor ou pior. Existe o compila e o não compila. Fica lento ou fica rápido. Fica difícil de ler o código e fácil de ler o código. Não acho seu código verboso demais.