SOU OBRIGADO A CRIAS V?RIAS DAL

MARCOS 26/01/2016 15:18:08
#456543
Boa tarde,colegas!
Estou determinado a implementar OO em meus
projetos.Não é fácil asimilar certos tópicos ,mais
vou chegar lá.

O caso é o CRUD:

Eu já sei como criar minhas classes,propiedades,
e métodos.Mas,sei que não é boa prática ficar
usando os métodos da classe (Cliente,por exemplo)
para se colocar todo o código de acesso aos dados.
Andei pesquisando e vi que os profissionais preferem
criar uma classe de acesso a dados separada.A chamada
DAL.

A dúvida:

Ao tentar criar uma classe de acesso a dados separada,não
tive problemas com o código de acesso,mas tem algo que
não entendo...
Se minha classe DAL é separada da minha classe Cliente,
como vou transportar os dados para um método [Ô]gravar[Ô],
que esta na classe DAL.Já sei,alguém irá dizer,que basta
transportar um objeto do tipo Cliente,como parametro deste
método gravar .Mas se for assim,então:

Cada classe do meu projeto (Cliente),por exemplo terá que
ter uma classe DAL particular.é isto mesmo ???
é deste modo que se faz,ou existe um modo de se usar somente
uma Classe DAL,para todas as classes de negócio???
NICKOSOFT 26/01/2016 15:36:45
#456544
pra vc entender bem por cima.....
sua classe cliente tem os métodos....
ai sua classe endereço dos clientes tem os métodos....ambas enviam informações pra uma única DAL via parâmetros
por isso a DAL tem q ser o mais genérica possível, q tudo q ela receber de parâmetros, ela trate e tenha como retornar uma resposta....
vc pode ter na DAL um método CRUD q simplesmente recebe uma string, e parâmetros e valores pros parâmetros.....esse método crud trata a string e acomoda os parâmetros e valores nos devidos lugares......ai vai das classes anteriores enviarem tudo corretamente....
NICKOSOFT 26/01/2016 15:39:35
#456545
veja q genérico.....
  
Public Function CRUD(ByVal sql As String, ByVal parameterNames() As String, ByVal parameterVals() As String) As Integer
Using connection As MySqlConnection = AbreConexao()
Using command As New MySqlCommand(sql, connection)
FillParameters(command, parameterNames, parameterVals)
Return command.ExecuteNonQuery()
End Using
End Using
End Function

Private Sub FillParameters(ByVal command As MySqlCommand, ByVal parameterNames As String(), ByVal parameterVals As String())
If parameterNames IsNot Nothing Then
For i = 0 To parameterNames.Length - 1
command.Parameters.AddWithValue(parameterNames(i), parameterVals(i))
Next
End If
End Sub
MARCOS 26/01/2016 17:18:56
#456553
NICKOSOFT,
Vou tentar criar uma classe DAL,do modo como você indicou.

Mas,tive uma idéia,e peço que me diga se é boa ou ruim:

E se eu criar a classe DAL,de modo que ela receba como parâmetro
a instrução Sql [Ô]pronta[Ô] da classe de negócio .Na verdade,eu já tenho
feito isto a bastante tempo.Mas,como agora quero fazer tudo conforme
define A OO,não sei se é correto.Tem algum problema,em se tratando
de Orientação a Objetos???
ACCIOLLY 26/01/2016 17:41:18
#456554
Resposta escolhida
Acredito que essa resposta vai depender se mais pessoas trabalham com você, pois em uma equipe você deve seguir um padrão. Porque? Porque se um membro da equipe for embora, outro pode substituir. Agora se você está sozinho, depois que a aplicação for compilada, a máquina não vai querer saber de que forma você produziu determinado software.
Eu mesmo, se me pedem pra fazer uma coisa rápida, eu faço do meu jeito. Tipo assim, eu tenho uma classe de conexao e dentro dela tenho dois métodos. um desses métodos se chama crud que uso pra inserir, atualizar e deletar. então quando chamo esse método apenas passo como parametro um sql, como String. essa string eu já concateno com o que está dentro das textbox. Assim:

Dim conn As New Conexao()
conn.crud([Ô]INSERT INTO clientes(nome,sexo) VALUES([ô] [Ô] & txt_Nome.Text & [Ô] [ô],[ô] [Ô] & txt_Sexo.Text & [Ô] [ô])[Ô])


Viu! com duas linhas faço uma insersão no banco, sem necessidade de criar outras classes com os respectivos atributos e métodos GET e SET. E até sei que é importante essa prática, mas não tenho equipe, todo meu projeto é bem comentadinho caso um dia eu bato a cabeça e perco parte da memória! rsrsrsrs

é isso aí! com ou sem equipe é legal mesmo seguir todos os conceitos OO, Mas se vc tem um prazo curto? e vai entender seu projeto de qualquer forma...

Uma dica que posso te dar é criar uma DLL de uma classe como essa que o NIKOSOFT te passou. E toda vez que vc for precisar conectar um projeto ao mysql vc só coloca nas referencias, e se livra do trabalho de digita-la denovo
NICKOSOFT 26/01/2016 19:53:40
#456556
Citação:

:
NICKOSOFT,
Vou tentar criar uma classe DAL,do modo como você indicou.

Mas,tive uma idéia,e peço que me diga se é boa ou ruim:

E se eu criar a classe DAL,de modo que ela receba como parâmetro
a instrução Sql [Ô]pronta[Ô] da classe de negócio .Na verdade,eu já tenho
feito isto a bastante tempo.Mas,como agora quero fazer tudo conforme
define A OO,não sei se é correto.Tem algum problema,em se tratando
de Orientação a Objetos???


veja pq não faço da forma q vc pensou, pq toda classe q vc tiver vai ter esse serviço de deixar pronta a instrução......
na verdade minha classe super genérica tenho esse crud e tenho outro q recebe a instrução pronta sem os parâmetros, então tenho 2 crud um c parâmetros e outro sem, da mesma forma q tenho o retornaDS, tanto c como s parâmetros, pra atender a qq coisa......

vc pode ate fazer como o acciolly disse, mas qnd se acostuma, vai mais rápido e pratico em classes, e vc tem q contar q sempre sirgem novas necessidades e invencoes de ultima hora
KERPLUNK 26/01/2016 23:11:36
#456559
Na minha série de vídeos, já cheguei a dar uma pincelada de como isso é feito sem precisar se esforçar muito. Para os próximos(que vou começar a gravar loguinho), vou terminar isso. Vai chegar ao ponto de simplesmente criar uma entidade que herda da classe de acesso à dados e toda a parte de leitura, gravação e deleção está pronta sem precisar de uma única linha de código. Veja no meu canal, acompanhe todos os vídeos e se conseguir pegar a idéia, você pode fazer você mesmo. Apesar de que quando estiver toda essa parte pronta, vou disponibilizar o código para quem quiser usar. Veja lá, se inscreva que loguinho está saindo toda essa parte.
MARCOS 27/01/2016 08:11:23
#456563
Bom dia,a todos!
Muito obrigado pelos esclarecimentos.

Para o colega:

Nickosoft:

Nickosoft,no momento decidi fazer como sugeriu.Ou seja ,fazer dos dois modos (Passando os atributos e usando a instrução
Sql pronta.

Accioly:

Fico contente,que você também use o mesmo modo que uso.O que significa que não era de tão errado.

Kerplunk:

Kerplunk,vou aguardar ansiosamente,para verificar como funciona esta classe que você indicou. (Estou na aula 8 do
seu curso na WEB).

Mas,tem somente algo que não ficou claro neste tópico.
Afinal,independente de usar parâmametros ou passar a instrução
Sql pronta para o DAL.O que a OO determina quanto a isto?
Tanto faz,qualquer um pode ser usado,ou somente um dos modos
é o correto na teoria da OO???


ACCIOLLY 27/01/2016 10:31:13
#456566
O que aprendi é que o principal objetivo da orientação a objetos é o [Ô]reaproveitamento[Ô]. Eu siceramente ainda acho que vc segue esse conceito. Pois muitos programadores que conheço colocam a mesma codificação de conexão ao banco de dados toda vez que fazem alguma operação nele.
Pode ter certeza de que se eles fizessem como vc faz, criando uma classe de conexao com os métodos apropriados e instanciando a mesma em outras classes (Veja bem, a instancia de uma classe querendo ou não se torna um objeto, isso sim é uma grande característica da OO), vai reaproveitar muitas linhas de codificação, diminuir tempo tornando a sua vida mais produtiva! Repare bem a frase que coloquei no rodapé dos meus posts.

Té mais!
NICKOSOFT 27/01/2016 15:56:01
#456573
tem varias vantagens, as principais num trabalho com banco de dados assim é justamente ter um único arquivo, uma classe q manipula o BD, e gerencia suas conexões....
cada classe pra determinada coisa do seu banco, uma classe de clientes, outra de produtos, vc tmb centraliza a manipulação de cada objeto em um único arquivo....imagina q seu cliente pede da noite pro dia pra mudar o cadastro de clientes, vc ir o código todo procurando onde manipula o cliente, mais fácil ir em um arquivo único.....ai alterar os forms onde essas informações são usadas...não deixa de ser um grade trabalho...
uma classe bem genérica pra banco de dados, vc usa em qq programa, eu levei um bom tempo afinando daqui e dali até chegar no modelo q uso hj, sempre fico de melhora-la fazendo a passagem do caminho do BD ou servidor, mas vai ficando.....qnd fizer isso fecho uma DLL pra não ter mais qq preocupação......
MARCOS 30/01/2016 09:34:26
#456709
Obrigado,pesoal!
Irei aplicar o que aprendi com vocês sobre DAL,nos próximos projetos.
Tópico encerrado , respostas não são mais permitidas