Visual Basic, VB .NET, ASP, ActiveX, Access, SQL Server

Carregando objetos na hora certa 

Imagine que você tem um controle de permissões a grupos e usuários onde existem objetos da classe "GrupoDeUsuarios" . Se cada grupo possuir uma coleção de objetos "Usuario" que dele participam e também uma coleção de objetos "Permissao" que armazena as permissões atribuídas ao grupo, você não tem que povoar estas duas coleções no momento em que cria um objeto da classe "GrupoDeUsuarios".  Basta carregar os valores das propriedades comuns do grupo e implementar as coleções como propriedades da classe. No procedimento Get da propriedade que deve retornar uma coleção, você testa se a variável interna usada para referenciar a coleção está em Nothing. Se não estiver, você retorna o objeto da variável. Se estiver em Nothing, você então cria um objeto Collection e atribui à variável. Em seguida, consulta a base de dados para coletar os dados de cada objeto que deve povoar a coleção e faz a criação e adição de cada objeto à coleção. Uma vez povoada, a coleção pode ser então retornada pelo método Get. Veja um exemplo de como poderia ser implementada a propriedade "Permissoes" para a classe "GrupoDeUsuarios":

Na seção de declarações gerais da classe, você teria uma variável para armazenar um objeto do tipo Collection

Private m_Permissoes As Collection

Na implementação da propriedade "Permissoes", você implementaria apenas o método Get como abaixo:

Public Property Get Permissoes() As Collection

  If m_Permissoes Is Nothing Then

      Set m_Permissoes = New Collection

      'Consulta a base de dados, cria e adiciona um a um os

      'objetos da classe "Permissao" a m_Permissoes

  End If 

   Set Permissoes = m_Permissoes

End Property

Isto lhe permite ganhar tempo, pois ao carregar objetos que possuem várias coleções de outros objetos, você não tem que povoar estas coleções exceto na primeira vez que elas forem referenciadas no código. Também evita algumas situações que conduziriam a um loop infinito. Imagine que você tem um objeto da classe "GrupoDeUsuarios", que tem uma coleção de objetos da classe "Usuario", que tem uma coleção de grupos nos quais o usuário está incluído. Ao carregar um grupo, você teria que carregar cada usuário, e a cada usuário carregado, teria que carregar vários grupos, e a cada grupo, vários usuários. Seria um loop infinito.