|
Software Development Kit to the Delphi-Win32 and Free Pascal compilers |
| Home > Wiki > br/do TDataSet ao MVP e OPF |
br/do TDataSet ao MVP e OPFenglish (en) | português (br) Os data types do PressObjects possuem uma estrutura totalmente diferente das classes envolvidas com TDataSet, no entanto é possível traçar alguns comparativos e ajudar a familiarizar aqueles que já tem familiaridade com DBware.
[edit] Data types orientados a objetos[edit] O objeto de negócioA maior diferença está no uso de TDataSet como objeto de negócio. A entidade que chega mais próximo é a classe TPressObject. No entanto, com raras exceções, um TDataSet trata de um conjunto de dados e um cursor, enquanto um TPressObject trata sempre de uma única informação. A informação que o TPressObject guarda é, para o TDataSet, a informação apontada por seu cursor, ou o registro atual. Um descendente de TDataSet é utilizado para criar objetos que navegam através das informações. Esta informação pode ser uma lista de produtos recém recuperada do banco de dados. Rotinas de navegação permitem mover o cursor entre os produtos, rotinas de edição permitem colocar a informação para ser alterada, ter as informações gravadas ou revertidas (canceladas). Um descendente de TPressObject, análogo ao exemplo acima seria um TProduto, é utilizado para criar um objeto que é a própria informação, e não uma lista de informações. Não existe o conceito de anterior e próximo, uma vez que não existe lista. Por não existir lista, também não existe colocar em modo de edição, confirmar ou cancelar alterações. Para recuperar uma lista, existem rotinas específicas que podem ser conferidas no artigo recuperar objetos. O que se obtém é um objeto semelhante a um TStringList, com uma propriedade Count, e cada índice aponta para um objeto da classe TProduto. Para alterar um produto basta acessar um de seus membros e associar o novo valor. Para confirmar as alterações (no banco de dados) chama-se uma rotina que recebe o objeto como parâmetro. Para reverter as alterações feitas em um objeto de negócio, o que é um equivalente ao Cancel do TDataset, basta restaurar um SavePoint. Detalhes de implementação a parte, a grande diferença entre um TDataSet e um TProduto é que o fruto do TDataSet não tem vida própria sem seu criador, e mesmo com ele, é uma entidade que mal conhece a si mesmo. [edit] Membros do objeto de negócioPartindo para os campos do TDataSet, este começa a ter certa semelhança com TPressObject. Um objeto descendente de TDataSet é criado com um conjunto de campos, fora detalhes como uma cláusula SQL ou configurações de mestre-detalhe que serão abordados adiante. Da mesma forma acontece com um descendente de TPressObject. No entanto cada campo de um TDataSet aponta para um tipo de informação, por exemplo, o nome do produto atualmente apontado por seu cursor. Mudou o cursor, muda a informação em cada um de seus campos. Como um TPressObject refere-se a um único objeto, seus membros terão sempre o mesmo valor até que o usuário o altere explicitamente. [edit] Agregações e composiçõesEsqueça TDataSource mais TDataSet para cada chave estrangeira e para cada mestre-detalhe. Na verdade, esqueça tanto chave estrangeira quanto mestre-detalhe. E, sem deixar de ser realista, pode começar a esquecer normalização também. Outra peculiaridade das agregações e composições no PressObjects é a facilidade com que uma informação é compartilhada. Caso dois pedidos diferentes possuam itens que referenciem o mesmo produto, uma única instância com este produto estará em memória, seja qual for o método utilizado para ler o pedido ou o produto. Ao alterar esta informação, todos os campos do MVP em que ela aparece, seja um grid, um combo ou um edit, seja através do próprio form do produto, do item do pedido ou do pedido, ela também será atualizada. O PressObjects utiliza contagem de referência para se certificar de que nenhum objeto será destruído enquanto ainda estiver em uso, e de que ele será destruído depois que ninguém mais fizer referência a ele. Descendentes de TPressObject conhecem muito bem a si mesmo, e qualquer um que aponte para si poderá fazer uso destas informações. Dentre os tipos de dados que um descendente de TPressObject pode conter encontra-se agregação, que substitui a chave estrangeira, e composição, que substitui o mestre-detalhe (a relação não é exatamente esta, vide classes de negócio para conhecer um pouco mais, mas ilustra bem a realidade). Para o desenvolvedor:
[edit] Apresentar objetos de negócio(to do) [edit] Persistência de objetos(to do) |
Personal tools |