Acesso a dados - Boas práticas

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
carlosdev
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Ter, 06 Abr 2010 4:55 pm
Localização: SP

Olá,
não trabalho com Oracle Forms, mas trabalho em uma empresa que possui essa tecnologia e fiquei em dúvida sobre alguns fundamentos que pra mim é muito estranho. Talvez vocês possam me ajudar.

Aqui todo acesso a base de dados é feito através de ligação Table, View ou StoredProcedures.. acho que vocês chamam isso de BaseTable.
Ou seja... o dado é vinculado ao objetos TextBox

Pelo que entendi aqui... ao se alterar um objeto TextBox o registro é alterado e o mesmo fica lockado.

Essa é uma boa prática de programação em Oracle Forms ?

Por que pergunto isso.
Em tecnologias Java ou C# isso é uma péssima prática de programação podendo até dar justa causa.
Nestas tecnologias temos esse recursos de linkar o dado diretamente com uma tabela, view ou proc, mas isso é extremamente proíbido.
Nestas tecnologias, temos componentes reutilizáveis que são responsáveis de se conectar no banco e recuperar o que quisermos através de parâmetros.
O retorno destes dados é exibido em tela.
Se o usuário editar um textbox, o registro não é alterado pois o componente já abriu a conexão, trouxe o dado e fechou a conexão.
A interface é que fica responsável por popular os dados.
Se o usuário editar o registro e clicar no botão Gravar, a tela deverá novamente invocar um componente passando como parâmetro os dados da tela e esse componente novamente abrirá uma conexão com o banco, fará o update através de SQL ou Procedure e depois fecha a conexão novamente.

Além disso, nestes tecnologia tem padrões de desenvolvimento (nome de classes, métodos, declaração de variáveis, constantes, parâmetros).
Tudo isso tem uma maneira correta a ser realizada.

Existe algo parecido com isso para Oracle Forms ?

Desde já agradeço,
Carlos
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Você pode fazer dessa format tb, mas o objetivo é justamente não permitir que 2 pessoas alterem o mesmo registro ao mesmo tempo.

Lembre-se que no Oracle o registro nunca fica locado pra leitura, ou seja, enquanto o usuário 1 está alterando uma determinada linha, essa linha fica disponível para os outros exatamente da forma que ele era inicialmente.

A linha só será alterada e disponibilizada para os outros após o COMMIT, e nesse momento, outros podem alterar.

Essa método que todas linguagens usam de abrir a conexão, buscar, fechar. Depois abrir altearar o que quer, fechar existe muito porque o banco de dados pode ser qualquer um, ou seja, não usam as features dos bancos de dados. (quem faz tudo é a camada, ou seja: se tiver um MYSQL ou um ORACLE, pra sua linguagem é transparente).
carlosdev
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Ter, 06 Abr 2010 4:55 pm
Localização: SP

Olá Thomas,
obrigado por responder.
Sobre você dizer que o intuito de usar BaseTable é justamento não permitir que 2 pessoas alterem o mesmo registro... é estranho.
Pois desse modo, um usuário pode consultar o registro e se ele por acaso editar um TextBox o registro fica lockado. Se neste momento, essa pessoa decidir ir tomar um café ou atender o telefone, o registro ficará lockado para outra pessoa e isso não pode acontecer.
Até porque, podemos ter uma tela que consulte e altere apenas alguns campos e outra tela que consulte e altere outros como por exemplo alteração de status de uma fatura.

Trabalhando de maneira desconectada, NUNCA teremos esse tipo de problema. Eu só queria entender se isso é ou não considerada uma boa prática.
Pois isso é coisa que nem estagiário Java ou C# pode fazer.
Ou seja, eu só quero saber se tem desenvolvedores Forms que trabalham desconectados ou se isso é uma prática comum.
Não estou dizendo que isso é ruim em Forms... eu estou dizendo que isso é péssimo em Java ou C#.
Como não trabalho com Oracle Forms eu queria entender um pouco mais da maneira de trabalho de vocês.

Outra coisa, eu não entendi quando você disse que em Java ou C# o pessoal abre, executa o comando e fecha a conexão porque não utilizam as features do banco de dados.
Isso não é verdade.

Isso é feito porque nestas tecnologias você trabalha componentizado.
O básico da orientação objetos aconselha no mínimo 3 camadas.
-Interface (Tela Windows ou Página Web)
-Camada de Negócios (Responsável por validações, controlar transações, e regras)
-Camada de Dados (Responsável por acessar o banco de dados)

-Internface - Nunca pode acessar a camada de dados diretamente

-Camada de Dados (Camada burra responsável por executar comandos SQL seja através de package, procedures, views, etc)
Exemplos:
ClienteDao (Data Access Object de Cliente que é responsável por todas as informações de Cliente. Tudo relacionado a clientes estará nesta classe)
ProdutoDao (Idem para Produtos)

-Camada de Negócios (Camada inteligente que pode ser acessada por Tela ou por outras camadas de negócios. Essa camada também pode controlar transação pois isso não é feito no banco quando se trabalha com Orientação a Objetos)
Exemplo: ClienteBusiness (Tudo que o programador precisar acessar de clientes estará nesta classe já que ele não pode acessar diretamente a classe ClienteDao)
public List<ClienteVO> Listar() //Lista todos os clientes
public ClienteVO Obter(int idCliente) //Obtem 1 cliente pelo id

Dessa maneira, as telas somente acessam componentes business. O projeto inteiro pode acessar estas classes sem a necessidade de repetir código. Basta chamar o componente desejado e invocar o método.

Não sei se ficou claro... eu tentei exemplificar da maneira mais simples que pude.
Concluindo... eu só queria saber se alguém programa parecido em Forms.
Eu sei que não possui classes... mas se pelo menos alguém utiliza procedures ao invés de classes e consequentemente se fazem o acesso a dados de maneira desconectada (abrindo, executando comando e fechando a conexão).

Um outro grande problema que vejo em trabalhar conectado é que se tivermos 1000 usuários acessando o sistema, teremos 1000 conexões ativas e esse é um outro problema.

Sobre padrão de programação não existe nada também ?
Em Java ou C# o pessoal é extremamente rígido quanto a isso.
Para efeito de conhecimento, o Visual Studio .Net da Microsoft possui integrado um analisador de código que lhe informa TUDO que foi codificado de maneira errada: Falha de segurança, nomenclatura errada, complexidade elevada de código, performance, etc.

Mesmo não tendo nada automatizado, eu gostaria que fosse adotado aqui algum padrão. Não tem cabimento cada desenvolvedor fazer do seu próprio jeito.

Obrigado,
Carlos
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Sobre padrão de programação não existe nada também ?
Em Java ou C# o pessoal é extremamente rígido quanto a isso.
Com certeza JAVA e outras linguagens "modernas" são muito mais organizadas. Com forms, é possível que cada um invente sua maneira de programar. E pra piorar, é muito comum vermos programas onde não são usado as features do Forms, causando um código horrível.
Um outro grande problema que vejo em trabalhar conectado é que se tivermos 1000 usuários acessando o sistema, teremos 1000 conexões ativas e esse é um outro problema.
Sim, tem uma conexão pra cada usuário. Quando é necessário utilizar a aplicação pra milhares de pessoas, normalmente NÃO se usa forms.
Trabalhando de maneira desconectada, NUNCA teremos esse tipo de problema. Eu só queria entender se isso é ou não considerada uma boa prática.
Nunca vi programas em form usarem a forma desconectada. É comum que o registro fique locado quando é iniciada uma alteração. (pode-se desabilitar isso, mas é muito raro).
Sobre as camadas:
O que eu falei é que em Java, .NET, etc tem uma camada responsavel pelo banco. Basta chamar uma API que ela faz o serviço, independente de QUAL banco que esteja sendo usado. (hoje se usa Oracle, amanhã podem alterar pra outro banco que tudo vai continuar funcionando). Isso é otimo, pois faz com que a aplicação não fique "presa" a um banco. Em compensação, a API não pode usar todas features do banco, pois pode ser que no outro banco, nem exista a feature... É disso que eu falava.

Em resumo:
Forms é uma linguagem que já tem mais de 20 anos! Ela era em modo caracter, passou a ser modo grafico (cliente servidor), e depois, passou a ser WEB (applet). E hoje tem como importar um form pra WEB mesmo (apex). Então: é praticamente um milagre que um programa feito 20 anos atras ainda possa ser executado hoje em dia após todas essas mudanças de paradigmas... É claro que tem muitas coisas que são ruins, mas quem quer refazer todo seu sistema? Talvez por isso que o forms está sobrevivendo. Com certeza, quem faz uma aplicação NOVA, não faz em forms...
carlosdev
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Ter, 06 Abr 2010 4:55 pm
Localização: SP

Obrigado pelas respostas Thomas.
Foi muito útil pra mim que não conheço essa tecnologia.
Eu trabalho com .Net C# e pra mim é um paradigma muito grande ver sistemas conectatos e utilizando BaseTable, etc.

Eu precisava entender se isso era uma coisa de uma determinada empresa ou se esse é o modo que a maioria faz.

Atenciosamente,
Carlos
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Google [Bot], Google Adsense [Bot] e 5 visitantes