Padrão Emergente
Versionamento
Data | Versão | Descrição | Autores |
---|---|---|---|
13/09/2021 | 1.0 | Criação do documento | Gabriel Batalha, Hugo Bezerra, Kleidson Alves, Lucas Gabriel e Lucas Rodrigues |
19/09/2021 | 1.1 | Aplicação do Lazy Load | Davi Antônio, Gabriel Batalha, Hugo Bezerra, Kleidson Alves, Lucas Gabriel, Lucas Rodrigues, Wellington Jonathan |
Introdução
Lazy Load (carregamento preguiçoso) é um padrão de projeto que é muito utilizado no desenvolvimento de software e consiste em atrasar a inicialização de um objeto até que ele seja necessário. O objetivo do Lazy load é melhorar o desempenho da aplicação, principalmente aquelas que fazem carregamentos massivos de dados, carregando os dados conforme seja necessário. Dessa forma, a sua utilização pode reduzir o tempo de carregamento, além de conservar largura de banda e alguns recursos do sistema, tanto do servidor quanto do cliente.
Existem basicamente 4 formas de se implementar o Lazy Load, sendo elas,virtual proxy, value holder, ghost, e lazy initialization. Os nossos estudos focaram na Lazy Initialization.
Lazy Initialization
Lazy initialization (inicialização preguiçosa) é uma das formas de implementação do Lazy Load e se consiste em uma tática de atraso na criação de um objeto até o momento em que seja necessário, isso é feito a partir da implementação de uma função que irá checar primeiro se aquele objeto é nulo e em caso afirmativo irá calcular as propriedades do objeto e criá-lo durante a execução da função.
Ao utilizar o lazy initialization obtemos duas características importantes, o atraso de uma operação custosa até o momento em que ela se torna extremamente necessária e salvando o resultado garantimos que não vamos precisar realizar aquela mesma operação novamente.
O lazy initialization está sendo implementado, a seguir, como um exemplo toy. A Linguagem Dart tem um modificador late que tem como funcionamento especial implementar o lazy initialization .
No exemplo toy, na classe CategoryScreen o late é aplicado para a variável Firestore Instance de forma que ela só é inicializada na primeira vez que for acessada, o que caracteriza o lazy initialization.
Modelagem
Exemplo Toy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Outras implementações
Falando simplificadamente sobre as outras formas de implementação do Lazy Load, temos que o virtual proxy é um método que consiste em, quando acessar um objeto, chamar um objeto virtual com a mesma interface do objeto real. Quando o objeto virtual é chamado, carrega-se o objeto real, depois delega para ele.
O método ghost consistem em carregar um objeto em um estado parcial, apenas usando um identificador. Então, quando uma propriedade do objeto for chamado pela primeira vez, carregue os dados completos.
O método value holder consiste em criar um objeto genérico que lida com o comportamento do carregamento preguiçoso. Este objeto deve aparecer no lugar dos campos de dados de um objeto.
Referências
FOWLER, Martin. Patterns of Enterprise Application Architecture. Addison-Wesley, 2002.
Null safety - Lazy initialization. Disponível em: https://dart.dev/null-safety/understanding-null-safety#lazy-initialization. Data de acesso 19/09/2021
Lazy initialization. Disponível em: https://en.wikipedia.org/wiki/Lazy_initialization. Data de acesso: 13/09/2021
Lazy Initialization. Disponível em: http://www.javapractices.com/topic/TopicAction.do?Id=34. Data de acesso: 13/09/2021
What is Lazy Loading. Disponível em: https://www.imperva.com/learn/performance/lazy-loading/. Data de Acesso: 13/09/2021
Lazy loading. Disponível em: https://pt.wikipedia.org/wiki/Lazy_loading. Data de Acesso: 13/09/2021