Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Seria Boa Prática utilizar uma classe que representaria um Modelo?

Olá, bom dia, a minha dúvida é que, como eu venho do mundo Java, por exemplo o binding feito pelo JSF em seus Managed Beans ou Beans do CDI , são feitos atravéz da EL(Expression Language), então eu poderia criar uma pasta "src/models" que guarda classes que representaria o modelo do sistema, por exemplo poderia exportar uma classe Autor, e atravéz das propriedades get e set , poderia fazer um binding transparete no JSX, por exemplo:

<input value={this.state.autor.nome} onChange={this.setNome} >
<input value={this.state.autor.email} onChange={this.setEmail} >
<input value={this.state.autor.senha} onChange={this.setSenha} >
class App extends Component {
    constructor() {
        super(); // chama o constructor de Component
        this.state = { autor: new Autor() , autores: []} 

        this.cadastraAutor = this.cadastraAutor.bind(this);
            this.setNome = this.setNome.bind(this);
            this.setEmail = this.setEmail.bind(this);
            this.setSenha = this.setSenha.bind(this);
    }



  setNome(reactEvent) {
    let autor = this.state.autor;
    autor.nome = reactEvent.target.value;
    this.setState({"autor": autor});
  }

  setEmail(reactEvent) {
    let autor = this.state.autor;
    autor.email = reactEvent.target.value;
    this.setState({"autor": autor});
  }

  setSenha(reactEvent) {
    let autor = this.state.autor;
    autor.senha = reactEvent.target.value;
    this.setState({"autor": autor});
  }


    componentDidMount() {
        $.ajax({
        ...,
        success: function(data) {
            this.setState({
                autores: data.map(autor => new Autor(autor.id, autor.nome, autor.email)); 
            })
         }.bind(this)

        ...
        }) 
    }

}

e na classe "src/models/Autor"

export default class Autor {

    constructor(_id = '', _nome = '', _email = '', _senha='') {
        Object.assign(this, {
            _id, 
            _nome,
            _email, 
            _senha
        });
    }

    get id() { return this._id; }

    set nome(nome) { this._nome = nome; }
    get nome(){ return this._nome }

    set email(email) { this._email = email; }
    get email() {return this._email; }

    set senha(senha) { this._senha = senha; }
    get senha() { return this._senha }

    toJSON() {
        return JSON.stringify({ nome: this._nome, 
                email: this._email, senha: this._senha })
    }

    toAutor(autorStr) {
        return JSON.parse(autorStr);
    }
}

Então , essa forma de utilizar o {} do JSX, e passar o getter do meu modelo para o value seria uma forma que "GASTARIA MAIS PROCESSAMENTO" ou seria BOA PRÁTICA ou seria "DESNECESSÁRIO"?, ao meu ver eu estaria utilizando bem mais o Conceito de Orientação a Objetos e o Padrao MVC já que já teria um Model , visto que a classe Autor seria nada mais que um POJO na realidade, apenas uma classe que guardaria o valor de um Autor.

2 respostas
solução!

Fala Cleusa Pereira, tudo bom?

Bom como arquitetar seu projeto acredito que seja algo bem pessoal e a ser definido com seu time. Existem diversas formas de organizar seus projetos React, ao longo do curso você vai ver uma um pouco diferente, mas faz sentido ter um modelo representando algo do seu sistema :)

Normalmente nos sistemas que eu trabalhei não cheguei a ver algo nesse nivel, mas faria sentido.

humm, ok, parece ate muito obvio o que eu perguntei mais, acredito que pequenas coisas fazem diferença na hora de codar, bom obrigada pela resposta :)