SOBRE USO DE CLASSES

LUIS.HERRERA 08/09/2011 10:30:27
#383688
Fiz minha primeira Classe ontem, básica mas foi.
Minha dúvida é quando sua real utilização com banco de dados.

Hoje (VB6 + ADO):
1- carrego o recordset desconectado e povoo um FlexGrid, depois destruo o recordset.
2- clico do grid e povoo os campos.
3- Edito os campos e gravo os dados somente do registro editado no banco (SQL Update)
4- Atualizo os dados do Flexgrid, assim não preciso recarregar novamente com novo acesso ao banco, isso agiliza muito o desempenho e reduz tráfego na rede, além do banco ficar quase sempre fechado por segurança.

Agora a dúvida, num novo cenário C# + Alguma forma de acesso ao banco, tem tantas que não sei qual a melhor + MS SQL, como ficaria as Classes com essa estrutura, como seria útil?

Pergunto porque se eu povoo os campos na tela com os dados do Flexgrid ou outro grid que tenha no novo VS, para que eu precisaria ter uma classe intermediando a edição ou visualização dos dados (consulta na tela)?

Um outro detalhe que não estou entendendo, tenho situações onde há várias tabelas relacionadas e não uma única como os exemplos para estudo de classes, então terei situações onde o registro principal de uma tabela, estará ligado a outras tabelas com múltiplos registros em cada uma, neste caso como ficaria a classe ou teria de ter uma classe para cada tabela? Se for isso, como ficaria a ligação de todas essas classes e seus múltiplos registros? Tá enrolado isso.
ROXRJ 08/09/2011 10:38:03
#383691
Fala Luis véio de guerra! Quanto tempo!! Sou o antigo usuário Marino! Blz??

Po, sua questão remonta os tempos de quando as classes estavam aparecendo por aqui.

No seu caso o ideal é jogar no papel um diagrama de fluxo e analisar CUIDADOSAMENTE o fluxo dos dados. Claro, você poderá fazer vários.

Outro ponto importante é a calma. é preciso estudar com calma a escolha a ser feita. Quando se envolvem registros e tabelas mestres é preciso tomar bastante cuidado.

Bem. é isso, esperemos as soluções dos especialistas.

Até.
LUIS.HERRERA 08/09/2011 10:49:14
#383692
Oi Marino, beleza! Prazer [Ô]Relê-lo[Ô] por aqu.i kkkkkkkkkkkkkk inventei minha primeira palavra, isso é a intenetquês.

Essa análise já foi feita para a estrutura atual que citei, sem usar classes, o problema é esse com a obrigatoriedade de programar com classes, mas não estou vendo objetivo em usar para essa manipulação de dados, a menos que tenha formas que ainda não aprendi, por isso conto com os colegas especialistas no assunto.

Até.
KERPLUNK 08/09/2011 10:56:26
#383697
Bem, o objetivo principal das classes, é vc [Ô]personalizar[Ô] os seus dados o máximo possível. Imagine que vc tem uma tabela de produtos e um dos campos é o [Ô]tipo[Ô] de produto, que é um número inteiro. Esse campo se refere à uma outra tabela, a de tipos. Se vc for usar essa mesma metodologia para [Ô]povoar[Ô] os dados na tela, vai ter que abrir dois recordsets, ou um recordset com joins/sub-queries. Se esses dados estiverem em uma classe, vc [Ô]preenche[Ô] a classe apenas uma vez e usa esses dados na tela sempre. A classe em si pode ter métodos de gravação, facilitando um bocado o seu trabalho. To fazendo um exemplo em VB6 exatamente sobre isso. A idéia é mostrar o uso de classes no VB6 que é algo que a maioria aqui entende bem. E com isso facilitar os conceitos mais avançados de objeto que tem no .NET. Coloquei aqui nesse tópico pra galera dar uma olhadinha, tá ficando um [Ô]estado da arte[Ô] bem bacana mesmo. Acho que até os mais avançadinhos vão querer dar uma olhadinha de como está ficando.
ROXRJ 08/09/2011 11:02:18
#383698
Hum.. o uso de classes se aplica em situações em que a máquina (classe mestre) coordena tudo, e a cada form se usa os metodos e chamadas a mesma. Tipo sistemas de alto fluxo, onde o [Ô]miolo[Ô] continua ativo mesmo TODOS os forms estando fechados (Dlls).

O conceito de classe consiste em reter boa parte dos códigos em módulos e deixar pouca coisa nos forms, afins de agilizar o desempenho e liberar memória o mais rápido possivel. Isso sem falar em manutenções futuras, pois é beeem mais fácil fazer manutenção de classe do que em varios forms, esta é a base da OOP, a reutilização.

A alguns anos eu estava com o mesmo objetivo, que era criar uma super classe e uma penca de derivadas que funcionasse como base para QUALQUER aplicação que utlizasse SGBDS, mas como andei trabalhando com outras coisas acabei deixando pra lá.

Bem, sua dúvida é relativamente simples de sanar, basta uma boa olhada no seu projeto e cabe a você decidir qual será a diretriz dele. Vai rodar via classe ou eventos via forms?

Parece complexo, mas não é. Tenha em mente que a classe é um [Ô]motor[Ô] e esta coordena tudo e futuramewnte você poderá portá la a outra aplicação ou senão aperfeiçoar a mesma.

Aos poucos a sua solução aparece... relaxa...


Até.
LUIS.HERRERA 08/09/2011 14:40:26
#383735
Kerplunk como sempre super prestativo. Ainda bem que o VBMania sempre tem alguém com esse ímpeto de ajuda, parabéns.

Estou estudando seu projeto, vai ser muito útil mesmo os conceitos, e acho que ainda surgirão várias duvidas nesse seu exemplo, então terei de [Ô]explorar[Ô] um pouquinho para tentarmos esclarecer bem o assunto, pode ser?

Hoje eu uso vários DBCombos, cada um vinculado a um recordset desconectado de uma tabela auxiliar para popular os dados dos campos ID e Descrição, no caso do seu exemplo esse a tabela Tipo. Eu tenho DBcombos para: Departamentos, Colaboradores, Cargos, e todas as demais tabelas usadas no sistema, são várias com dados assim, gravando na tabela principal só o índice da auxiliar. Realmente em cada formulário que uso, tenho de carregar um recordset específico para cada combo usado, usando esses combos para exibir os dados associados nas outras tabelas principais.

Pelo que entendi, você diz que as Classes podem ser usadas para fazer exatamente a mesma coisa que o recordset, com o benefício de centralizar a manutenção em um único local (classe) e não em cada formulário. Até aqui excelente, mas surgem algumas questões sobre isso:

1- Esses dados auxiliares na classe, são carregados digamos na abertura do programa, ficando disponível para todos os forms, mas se um outro usuário (pois o sistema é muitiusuário) alterar os dados cadastrados em uma destas tabelas auxiliares, como ficaria a situação de quem já abriu o programa e está usando os dados carregados? No caso atual com os recordsets, eles são recarregados a cada abertura da tela e não do programa, assim minimizando o problema de desatualização dos dados.

Nota: Um exemplo típico é desligar um colaborador da empresa, e ele continuar aparecendo na lista (classe), ou incluir um novo produto que não consta na lista da classe já carregada.

2- O uso da classe para armazenar n registros de tabelas, ainda não consegui entender como usar, pois pelo que entendi a Classe é uma estrutura que instanciamos para usar com um registro específico. Para ter outro registro, teria de criar outra instância. No caso de vários registros na mesma instância, então essa (instância) teria que ser um Array da Classe? Pois só assim consigo entender que cada item desse array da classe tenha um registro diferente, onde cada propriedade da classe seria um campo da tabela, ex(ID, Descrição, Situação[ativo ou inativo], etc...) é isso? Ainda não li nada sobre criar arrays de classes, ou teria de fazer um For next para criar e preencher esse array da classe?

3- sobre o item 2 surge uma outra situação, como localizar um registro específo pelas instâncias da classe, pois o correto numa busca é ter todos os registros juntos. Já num arrays tería o índice do array, só que a busca seria pelo nome ou pelo ID do registro, então não sei como conseguiria localizar o registro correto.

De qualquer forma teria de usar o DBCombo para exibir ou selecionar os dados que seriam gravados, porém sem o recordset não sei como seria associar uma Classe ao DBCombo e como usar a Função de busca do Change da combo.
Não sei se é possível, mas talvez o ideal seria criar uma classe que criasse o recordset para uso e associação ao Combo, então em cada formulário aberto, seria criada uma instancia da classe com o recordset. Dessa forma continuaria centralizada a manutenção do código, porém cada form usaria uma instãncia da classe recordset. Será que [Ô]viajei na maionese[Ô]?

Isso até pode ser simples, mas por enquanto está bem complicado de entender.
KERPLUNK 08/09/2011 14:49:28
#383739
1 - Os dados são carregados quando forem necessários. Se for necessário carregar na abertura do form, então faça. Se usuário X está visualizando o registro [Ô]1[Ô] e o usuário Y alterou esse mesmo registros, então suas classes devem ter um [Ô]pool[Ô] de lock, ou seja, quando usuário X abriu o registro o mesmo deve ficar indisponível para outros usuários alterarem. Tem n maneiras de se fazer isso, uma delas é colocando um campo tipo boolean no registro que é marcado quando o registro for aberto(a classe for instanciada) e desmarcado quando o mesmo for descartado(quando desinstanciar a classe)
2 - O exemplo que fiz, usa uma collection para ter uma lista de objetos. Nesse exemplo, veja a variável mCol das classes [Ô]Lista(alguma_coisa)[Ô]
3 - Como as classes de lista possuem uma collection que armazena todos os registros da lista, na própria classe de lista pode-se filtrar os mesmos. Mas o ideal é criar um método dentro da classe de lista adequado à sua necessidade, procurar por nome, por id, por documento...
LLAIA 09/09/2011 13:55:48
#383813
Pra quem quiser saber mais sobre padrões POO:

http://www.4shared.com/get/F09aVihl/Applying_UML_and_Patterns_-_Cr.html

Esse livro tem edição em português, mas dizem que a tradução não ficou boa. Já vi em sebos virtuais. é interessante como os padrões GRASP e GoF podem ajudar na hora de definir as classes e a interação entre elas.
MMMX 09/09/2011 14:08:18
#383814
Aproveitando o tópico e a questão de criar mais de um objeto dentro da mesma classe? Isso eu não consegui fazer ainda.
KERPLUNK 09/09/2011 14:17:20
#383815
MMMX
Cada classe é um objeto, pelo menos no VB6. Você não pode criar uma dentro da outra. Mas vc pode criar dois objetos separados e usar um dos objetos como PROPRIEDADE de outro.
MMMX 09/09/2011 14:52:07
#383817
Sim, mas é possível criar vários objetos separadamente dentro da mesma classe certo? O que eu não entendo é como criar e como referenciar depois esses outros objetos dentro da classe (dll).
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas