Getters e Setters
Uma das etapas importantes para a construção de aplicativos orientados a dados é controlar o fluxo de dados. O Lucid oferece getters e setters para facilitar o controle do fluxo de dados.
Vamos dar um exemplo de Modelo de postagem no qual você sempre terá um título de postagem que deve ser capitalizado ao exibi-lo para o usuário final. Por exemplo, um título chamado introdução ao adonis deve ser exibido como Introdução ao Adonis.
Há algumas maneiras de atingir os resultados finais. Primeiro, fale sobre a maneira ingênua de fazer isso.
- Use a propriedade CSS
text-transform
para capitalizá-la. E se você também tiver uma API JSON? - Sempre que encontrar um artigo, capitalize-o manualmente, modificando a propriedade.
- Você fará isso para 20 postagens dentro de um loop?
- E se você estiver buscando postagens como uma relação para um determinado usuário? Isso significa fazer um loop por todos os usuários e, em seguida, suas postagens e alterar manualmente o título do artigo.
Todos os truques mencionados anteriormente não são sustentáveis. A melhor maneira é modificar o título de sua origem para garantir que ele retorne o mesmo valor, não importa o que aconteça.
Getters
No Lucid, definimos getters para tais situações. Os getters alteram um determinado atributo imediatamente, sem alterar o valor original no banco de dados.
'use strict'
const Lucid = use('Lucid')
class Post extends Lucid {
getTitle (title) {
return title.replace(/^(.)|\s(.)/g, function($1) {
return $1.toUpperCase();
})
}
}
Sobre Getters
- Getters são sempre definidos com a palavra-chave
get
seguida pelo nome do atributo. Por exemplo, um getter para o atributotitle
será definido comogetTitle
. - Getters são síncronos, o que significa que você não pode executar código assíncrono dentro deles. Você deve usar link:database-hooks[hooks] para isso.
- Getters receberão o valor atual de um determinado campo.
- Getters são avaliados quando você chama o método
toJSON
em uma instância de modelo ou uma coleção.
Setters
Setters são o oposto de getters e eles alteram o valor quando você os define em sua instância de modelo. Por exemplo
'use strict'
const Lucid = use('Lucid')
class User extends Lucid {
setAccess (access) {
return access === 'admin' ? 1 : 0
}
}
const user = new User()
user.access = 'admin'
console.log(user.access) // will return 1
yield user.save()
Sobre Setters
- Setters são sempre definidos com a palavra-chave
set
seguida pelo nome do atributo. Por exemplo, um setter para o atributoaccess
será definido comosetAccess
. - Setters são síncronos, o que significa que você não pode executar código assíncrono dentro deles. Você deve usar hooks para isso.
- Setters receberão o valor atual de um determinado campo.
- Eles são executados somente quando você define/atualiza o valor de um determinado campo na instância do modelo.
Propriedades computadas
Propriedades computadas são como getters, mas são valores virtuais que não existem nas tabelas do seu banco de dados.
Você pode querer propriedades computadas em muitos casos. Por exemplo, calculando o nome completo de um determinado usuário usando seu primeiro e último nome.
'use strict'
const Lucid = use('Lucid')
class User extends Lucid {
static get computed () {
return ['fullname']
}
getFullname () {
return `${this.firstname} ${this.lastname}`
}
}
Sobre propriedades computadas
- Propriedades computadas devem ser retornadas como uma matriz do getter
computed
. - Métodos computados são definidos da mesma forma que os
getters
. - Eles não recebem nenhum valor e, portanto, acessam os valores da instância do modelo usando a palavra-chave
this
.