FORM MASTER DETAIL
Eu tenho uma duvida, até meio boba eu acho, sou novato no C# , mas já procurei bastante e não encontrei nada que responda minha questão.
Suponhamos que eu tenha uma tela de venda, com dados da venda e os itens, como faço isso ? Digo, em relação a classe.
é uma classe só, fazendo tudo, gravando a venda, os itens e os dados do contas a receber, ou tem que ser uma classe pra cada item desses, uma pra venda, uma pra item e uma pra contas a receber.
E no caso de ser a segunda opção, como fica o controle de transação e a conexão, já que a cada comando executado ele abre, executa e fecha a conexão ?
Suponhamos que eu tenha uma tela de venda, com dados da venda e os itens, como faço isso ? Digo, em relação a classe.
é uma classe só, fazendo tudo, gravando a venda, os itens e os dados do contas a receber, ou tem que ser uma classe pra cada item desses, uma pra venda, uma pra item e uma pra contas a receber.
E no caso de ser a segunda opção, como fica o controle de transação e a conexão, já que a cada comando executado ele abre, executa e fecha a conexão ?
fala!
eu faria um classe para cada cara mesmo, tipo um item é uma classe, um pedido é uma classe que em umas das propriedades é uma coleção de itens... e assim vai indo
quanto ao banco, em metodos que usam banco, voce pode colocar no contrutor um parametro para você passar a conexão com banco, ou no proprio metodo
tipo
public class item{
item(){
item(new cn = new sqlconnection([Ô]connectionstring[Ô]))
}
item(cn as sqlconnection){
}
}
algo assim, se eu instancia o objeto eu posso ou não passar o conexão
item obj item = new item(); ou
sqlconnection cn = new sqlconnection([Ô]connectionstring[Ô]);
item obj = new item(cn);
Olá ANDREVB, na minha opnião essa duvida não se aplica somente a C#, mas a POO.
Neste exemplo que você colocou, eu faria o seguinte:
No banco criaria 3 tabelas Vendas, ItemVenda e ContasReceber
Na aplicação teriamos 1 form para colocar as informações de venda e 3 classes Conexão, Vendas e Contas
Na classe conexão abre a conexão, neste caso com BeginTrans, e fecha a conexão, se deu tudo certo CommitTrans senão Roolback
Na classe Vendas dois métodos IncluirVendas e IncluirItemVenda
Na classe Contas um método IncluirContaReceber
No form no click do botão salvar, chamamos as funções na seguinte sequência
Abrir conexão (begintrans)
Incluir vendas (em caso de erro fecha a conexão)
Incluir Itens (em caso de erro fecha a conexão)
Incluir contas (em caso de erro fecha a conexão)
Fechar conexão (commit ou roolback)
Neste exemplo que você colocou, eu faria o seguinte:
No banco criaria 3 tabelas Vendas, ItemVenda e ContasReceber
Na aplicação teriamos 1 form para colocar as informações de venda e 3 classes Conexão, Vendas e Contas
Na classe conexão abre a conexão, neste caso com BeginTrans, e fecha a conexão, se deu tudo certo CommitTrans senão Roolback
Na classe Vendas dois métodos IncluirVendas e IncluirItemVenda
Na classe Contas um método IncluirContaReceber
No form no click do botão salvar, chamamos as funções na seguinte sequência
Abrir conexão (begintrans)
Incluir vendas (em caso de erro fecha a conexão)
Incluir Itens (em caso de erro fecha a conexão)
Incluir contas (em caso de erro fecha a conexão)
Fechar conexão (commit ou roolback)
RXGomes, caso então eu abriria a conexão atraves da classe conexão e não em cada método chamado, Incluir vendas, por exemplo.
No meu incluir vendas eu so aproveitaria a conexão aberta, e so fecharia em caso de erro, se tudo ocorrer bem a conexão permaneceria aberta, até que eu chamasse um metodo pra fechar a conexão da classe conexão.
é isso mesmo ?
No meu incluir vendas eu so aproveitaria a conexão aberta, e so fecharia em caso de erro, se tudo ocorrer bem a conexão permaneceria aberta, até que eu chamasse um metodo pra fechar a conexão da classe conexão.
é isso mesmo ?
assim funciona, mas as classe perdem a independencia
cada classe deve ter 2 contrutorores, um que~sem parametro, e outro com a conexão como parametro
quando a classe é instanciada sem uma conexão a propria classe se resolve e abre uma conexão
se for instancia informando uma conexão ela não precisa abrir e usa a informada, fazendo com que o sistema use apenas 1 conexão e todas as classe possão ser usadas independentes.
GREGO, blz, até aà entendi, o meu grande problema é na hora de fechar a conexão, como faria para diferenciar se a classe abriu a conexão e nesse caso ela mesmo fecharia, ou se recebeu uma conexão como parametro, e aà teria que ficar aberta ?
Desculpe as perguntas mas sou novo no c#, vb6 é bem diferente, rs.
Desculpe as perguntas mas sou novo no c#, vb6 é bem diferente, rs.
se a classe abriu sua propria conexão, quando o objeto for destruido a conexão tbm sera destruida, pode fazer o teste.
uma pratica legal é que nestas classe vc herde a interface IDisposable, esta interface contem um metodo chamado Dispose neste método voce pode destruir a conexão caso seja uma conexão propria do objeto, e você pode saber se a conexão e propria usando uma flag.
uma pratica legal é que nestas classe vc herde a interface IDisposable, esta interface contem um metodo chamado Dispose neste método voce pode destruir a conexão caso seja uma conexão propria do objeto, e você pode saber se a conexão e propria usando uma flag.
Tópico encerrado , respostas não são mais permitidas