Maneira preferida de converter do carregamento preguiçoso/atrasado para o carregamento ansioso em uma API?

StackOverflow https://stackoverflow.com/questions/1924594

Pergunta

Eu tenho trabalhado em uma API (que envolve um tipo de serviço na Web) há um tempo, e é apenas um recurso completo.

Inicialmente, projetei esta API para ser preguiçosa/carregada de atraso; O que faz todo o sentido se você estiver interessado apenas em um pequeno subconjunto dos dados disponíveis, dada a latência inerente ao consumo de um serviço da Web. No entanto, não considerei alguns casos de uso em que o carregamento ansioso seria muito mais fácil para um consumidor da API.

Então, minha pergunta é: como você gostaria de ver uma API que é predominantemente de carregamento preguiçoso, exponha um mecanismo para obter versões de classes ansiosamente carregadas?

Estou inclinado para um explicit elenco, mas algo parecido com Eager.AsEager(SomeDelayLoadingObject) Também parece natural se mais detalhado.

Foi útil?

Solução

O que eu realmente acabei fazendo foi criar uma cópia superficial das classes que eu queria estar carregada ansiosamente, classes sem código funcional, mas com todas as mesmas propriedades.

Eu então defini dois elencos implícitos, de preguiçosos e ansiosos. Ambos os elenco copiaram todas as propriedades; acionando assim qualquer carregamento, se necessário.

Embora eu não ache que essa seja uma solução perfeita, isso faz com que carregar ansiosamente a troca de tipos; Não são necessárias alterações de código.

Outras dicas

Sua API está envolvendo um serviço da web, então sua API está mais ou menos atuando como proxy. Eu colocaria o comportamento de carregamento no próprio proxy, ou em algum tipo de contexto de proxy, e não nas classes.

// Basic: Every operation through the proxy uses Eager loading
using (var proxy = new ApiProxy(Loading.Eager))
{
  var result = proxy.DoSomething();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top