Source
Um source é a representação de repositório de dados que possui um conjunto de campos. Ele determina o esquema dos dados e popula os controles, que são os componentes visuais das interfaces DOUI.
O data provider é o responsável por obter dados junto a uma fonte de dados (por exemplo, uma tabela de banco de dados ou um arquivo texto) e popular um source.
Portanto, todos os dados apresentandos nas interfaces DOUI são obtidos através de sources e data providers.
Um source consiste em uma classe que estende a classe Source. Sua hierarquia é assim definida:
- A classe Source possui a implementação da infraestrutura de um source. É uma classe abstrata, ainda sem definição sobre como os dados são persistidos ou organizados;
- A classe TabularSource estende Source, acrescentando a lógica de que os dados estão organizados em uma forma tabular, em linhas e colunas, sendo que cada linha representa um dado e cada campo uma coluna. Há um campo que é a chave primária. O valor desse campo nunca repete e pode ser utilizado para identificar uma linha.
Os dados desse tipo de source são armazenados em uma instância de TabularData.
Esta classe também é abstrata, por não definir sobre como os dados são persistidos.
- A classe TableSource estende TabularSource, acrescentando a funcionalidade de poder mapear campos do source diretamente com colunas de uma tabela de uma base de dados. Deve-se especificar o atributo type com valor “table” na definição do source.
Este tipo de source possui um IDataProvider, que é responsável em prover dados ao source. A implementação de IDataProvider default é um TableDataProvider, que lê os dados da tabela com o nome especificado no nó table dentro do source. As colunas lidas são conforme os identificadores dos campos, ou o atributo opcional columnName nos campos.
É possível utilizar um DataProvider customizado. Para tal, na definição do source deve ser definido o elemento dataproviderClassName. Nesse caso, se o elemento dataproviderClassName for definido, ele deve conter o nome da classe que implementa o IDataProvider. Dessa forma, ao invés do TableSource utilizar sua forma padrão de leitura de dados, o IDataProvider especificado será chamado quando o source precisar ter seus dados lidos.
O ciclo de vida de um source é:
- Sua instância é construída;
- Seu método
loadData()
é executado, onde seus dados são carregados.