Sim, concordo contigo. O codigo SQL que tu colocastes esta na posicao
correta.
O que eu nao gosto é de depender de codigo SQL para meu programa funcionar.
 A minha ideia é que o programa funcione normalmente apenas com a camada de
regras de negocio, e a persistencia tenha a funcao apenas "complementar" ao
programa.
 Sds,
 Francisco

 On 11/21/05, Romario (Listas) <[EMAIL PROTECTED]> wrote:
>
> O que você chama de camada superior???
>
> O código SQL que coloquei está na *terceira* camada, ou seja, na camada
> de acesso à dados. Existe outro local mais correto que esse?
>
> Sds,
>
> Romario
>
>
>
>
> Francisco Trindade escreveu:
> > Nao sei, nao gosto de colocar codigo SQL na camada superior, acho que
> pode
> > complicar demais as coisas.
> > Uma opcao para a relacao 1 para 1 que eu pensei agora seriam classes
> > "amigas" colocadas no mesmo arquivo. Isso acabaria com o problema da
> relacao
> > circular (mas tem o problema de colocar duas classes no mesmo arquivo).
> > E quanto a 1 para N, eu vejo uma grande vantagem na bidirecionalidade,
> pode
> > poupar buscas imensas, em certos casos.
> > Sds.
> > Francisco
> >
> > On 11/21/05, rbr_vix_es <[EMAIL PROTECTED]> wrote:
> >
> >>Você não está sendo chato e Orientação a Objetos é algo que gosto
> >>muito de discutir. Gostaria que outros participassem, mas...
> >>
> >>Vamos lá!!!
> >>
> >>Ainda não tive como testar, mas continuo achando que o typecast não
> >>é necessário porque você já criou um objeto do mesmo tipo para
> >>receber o objeto recuperado na lista.
> >>
> >>Vejamos o problema da incubadora. Ao meu entender seria algo assim:
> >>
> >>Type
> >>TEspecie = (tpPeixe, tpAnfibio, tpReptil, tpAve);
> >>
> >>
> >>Type
> >>TAnimal = Class(TObject)
> >>Private
> >>FCodigo : Integer;
> >>FNome : String;
> >>FEspecie: TEspecie;
> >>Protected
> >>Public
> >>Property Codigo : Integer Read FCodigo;
> >>Property Nome : String Read FNome Write FNome
> >>Property Especie: TEspecie Read FEspecie Write FEspecie;
> >>
> >>Function Listar(oEspecie: TEspecie): TList;
> >>End;
> >>
> >>
> >>Type
> >>TOvo = Class(TObject)
> >>Private
> >>FCodigo: Integer;
> >>FAnimal: TAnimal;
> >>...
> >>Protected
> >>Public
> >>Property Codigo : Integer Read FCodigo;
> >>Property Animal : TAnimal Read FAnimal Write FAnimal;
> >>End;
> >>
> >>
> >>Type
> >>TIncubadora = Class(TObject)
> >>Private
> >>FCodigo : Integer;
> >>FCapacidade : Integer;
> >>FPrateleiras : Smallint;
> >>FTemperatura : Float;
> >>Protected
> >>Public
> >>Property Codigo : Integer Read FCodigo;
> >>Property Capacidade : Integer Read FCapacidade Write
> >>FCapacidade;
> >>Property Prateleiras: Smallint Read FPrateleiras Write
> >>FPrateleiras;
> >>Property Temperatura: Float Read FTemperatura Write
> >>FTemperatura;
> >>
> >>Class Function ListaOvos: TList;
> >>End;
> >>
> >>Se para você é importante saber em que local o Ovo está sem ter que
> >>perguntar e percorrer a emcubadora, monte um novo objeto para te
> >>auxiliar nessa tarefa, mas não acho que você deve criar uma
> >>referência da emcubadora no ovo.
> >>
> >>Ex.:
> >>
> >>Type
> >>TEstocagem = Class(TObject)
> >>Private
> >>FOvo : TOvo;
> >>FEmcubadora : TEmcubadora;
> >>FPrateleira : Smallint;
> >>FPosicao : Smallint;
> >>Protected
> >>Public
> >>Property Ovo : TOvo Read FOvo Write FOvo;
> >>Property Emcubadora: TEmcubadora Read FEmcubadora Write
> >>FEmcubadora;
> >>Property Prateleira: Smallint Read FPrateleira Write
> >>FPrateleira;
> >>Property Posicao : Smallint Read FPosicao Write FPosicao;
> >>
> >>Function Buscar(oOvo: TOvo): Boolean; Overload;
> >>End;
> >>
> >>
> >>O exemplo que você informou de um relacionamento 1 para 1 na verdade
> >>é um relacionamento 1 para N, porque um ovo só pode vir de uma
> >>avestruz, mas um avestruz pode pôr vários ovos. Estou certo?
> >>
> >>Vamos colocar um relacionamento de 1 para 1 como sendo o de Pessoa e
> >>CNH (Carteira Nacional de Habilitação). Digamos que a Classe Pessoa
> >>terá um objeto do tipo TCNH junto aos seus atributos. Vejamos o
> >>exemplo:
> >>
> >>Type
> >>TPessoa = Class(TObject)
> >>Private
> >>FCodigo: Integer;
> >>FNome : String;
> >>FCNH : TCNH;
> >>Protected
> >>Public
> >>Property Codigo : Integer Read FCodigo;
> >>Property Nome : String Read FNome Write FNome;
> >>Property CNH : TCNH Read FCNH Write FCNH;
> >>End;
> >>
> >>
> >>Type
> >>TCNH = Class(TObject)
> >>Private
> >>FCodigo : Integer;
> >>FNumero : String;
> >>FRegistro : String
> >>FCategoria : String;
> >>FDataExame : TDateTime;
> >>FExpedicao : TDateTime;
> >>FValidade : TDateTime;
> >>FObservacao: String;
> >>Protected
> >>Public
> >>Property Codigo : Integer Read FCodigo;
> >>Property Numero : String Read FNumero Write FNumero;
> >>Property Registro : String Read FRegistro Write FRegistro;
> >>Property Categoria : String Read FCategoria Write FCategoria;
> >>Property DataExame : TDateTime Read FDataExame Write FDataExame;
> >>Property Expedicao : TDateTime Read FExpedicao Write FExpedicao;
> >>Property Validade : TDateTime Read FValidade Write FValidade;
> >>Property Observacao: String Read FObservacao Write
> >>FObservacao;
> >>
> >>Function Buscar(iCodigo: Integer): Boolean; Overload;
> >>Function Buscar(sNumero: String): Boolean; Overload;
> >>Function Buscar(dtValidade: TDateTime): Boolean; Overload;
> >>End;
> >>
> >>No exemplo acima sabemos que o objeto Pessoa conhece sua CNH através
> >>da instância do objeto que ele possui, mas se precisarmos conhecer
> >>uma Pessoa através de uma CNH o problema fica mais difícil. A
> >>solução que vejo no momento seria:
> >>
> >>No seu DataModule:
> >>
> >>Function TdmPessoa.Buscar(iCodigo: Integer, oPessoa: TPessoa):
> >>Boolean;
> >>Begin
> >>
> >>With cdsPessoa Do
> >>Begin
> >>Try
> >>Close;
> >>CommandText := 'Select * From Pessoa P ' +
> >>'Join CNH C On (P.Codigo = C.CodPessoa) ' +
> >>'Where P.Codigo = ' + IntTostr(iCodigo);
> >>Open;
> >>
> >>If RecordCount > 0 Then
> >>Begin
> >>Result := True;
> >>Pessoa.Nome := FieldByName('Nome').AsString;
> >>...
> >>Pessoa.oCNH.Buscar(iCodigo);
> >>End;
> >>Except
> >>on E: Exception do
> >>ShowMessage(E.Message);
> >>End;
> >>End;
> >>End;
> >>
> >>
> >>Ufa!!! Acho que exemplifiquei bastante dessa vez. Vai dar até para
> >>escrever um livro. :-D
> >>
> >>Obs.: Como estou codificando direto no corpo do e-mail, pode ser que
> >>aja alguns erros. :-(
> >>
> >>Sds,
> >>
> >>Romario
>
>
>
>
>
> _______________________________________________________
> Yahoo! Acesso Grátis: Internet rápida e grátis.
> Instale o discador agora!
> http://br.acesso.yahoo.com/
>
>
>
> --
> <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
>
>
>
>
>
>   *Yahoo! Grupos, um serviço oferecido por:*   PUBLICIDADE
>
> <http://br.rd.yahoo.com/SIG=12fhlhppv/M=365837.7000707.7924794.2369893/D=brclubs/S=2137111264:HM/Y=BR/EXP=1132635080/A=2950750/R=2/id=noscript/SIG=10tift5qr/*http://br.movies.yahoo.com/>
> ------------------------------
> *Links do Yahoo! Grupos*
>
>    - Para visitar o site do seu grupo na web, acesse:
>    http://br.groups.yahoo.com/group/delphi-br/
>    - Para sair deste grupo, envie um e-mail para:
>    [EMAIL PROTECTED]<[EMAIL PROTECTED]>
>    - O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
>    Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>.
>
>


--
--
Francisco Trindade


[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a