Dica de Design: usando recordset compartilhado entre objetos

Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

Dica de Design: usando recordset compartilhado entre objetos

Um objeto do tipo coleção pode ter um método para pesquisar a base de dados e obter um recordset com os dados para cada um dos seus objetos, mas não há necessidade de construir completamente estes objetos antes que sejam solicitados. O que pode ser feito é dar aos objetos as  propriedades Recordset e Bookmark. Criamos cada objeto e os inicializamos apenas parcialmente atribuindo à propriedade Recordset uma referência ao recordset compartilhado por todos os objetos e à propriedade Bookmark o bookmark que aponta para o registro que contém os dados do objeto. O método Item da coleção, ao ser chamado pela primeira vez, povoa a coleção criando cada objeto do modo como foi visto acima. O objeto em particular que estiver sendo solicitado é inicializado just-in-time  quando alguma de suas propriedades persistentes for referenciada. Um método privado "Inicializar" é chamado para posicionar o recordset no registro que contém os dados do objeto mediante o uso da propriedade Bookmark. As propriedades persistentes são então carregadas com os valores colhidos do recordset. O objeto pode ter uma propriedade privada e somente leitura para sinalizar quando já foi inicializado ou não. Para objetos já existentes, deve-se usar como chave o valor do campo identidade do objeto, para novos objetos a serem adicionados à coleção, deve-se ter uma rotina na coleção que cria uma chave provisória. Após persistido no banco de dados, o objeto passa a ter como chave o valor do seu campo identidade. Para que o objeto avise a coleção de que precisa mudar de chave, veja a dica de design refcirc.htm que mostra uma forma elegante de por em comunicação objetos pais e filhos. Resta dizer que a coleção tem uma propriedade pública "Recordset" para que se possa usar este objeto recordset retornado pela sua pesquisa em um elemento de interface gráfica, tipo grade, por exemplo. Isto sem precisar povoar a coleção.

A próxima dica será sobre como dar às propriedades dos seus objetos a dimensão dos valores UnderlyingValue e OriginalValue como você tem nos objetos Field de ADO. Estes valores ajudam a ter controle sobre mudanças nos objetos, restaurá-los a estados anteriores e a retornar informação para tratar colisões de dados ocorridas no momento de gravar os objetos na base de dados.