Regras de negócio no banco de dados  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Emerson Macedo wrote:Bem, eu já vi muito.

Em todas elas você não viu nem 10% das regras no cliente?
Basta você ter um cálculo em um form ou em um datamodule... Voilá!

This message was edited 1 time. Last update was at 09/09/2008 18:10:37


Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

marcosalex
GUJ Expert
[Avatar]

Membro desde: 20/02/2008 12:32:59
Mensagens: 3368
Offline

"

This message was edited 1 time. Last update was at 12/02/2009 07:10:27

[Yahoo!] aim icon [ICQ]
Emerson Macedo
Virtual Machine Man
[Avatar]

Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline

tnaires wrote:
Emerson Macedo wrote:Bem, eu já vi muito.

Em todas elas você não viu nem 10% das regras no cliente?
Basta você ter um cálculo em um form ou em um datamodule... Voilá!

Vi sim. Isso era mais um problema. Regra em 2 lugares....

marcosalex wrote: Passei por situações em que o código feito na procedure era 10% do código feito em Java e muito mais simples. Por isso julgo mais fácil a manutenção. Já vi situações de concorrência que tinha uma verdadeira ginástica em Java pra conseguir evitar incoerência do estoque de produtos com os estoques da loja. Foi substituído mais de 300 linhas de código por uma simples trigger de 5 linhas e funcionou com muito mais performance.

Bom, também já vi códigos que aconteceu exatamente o inverso, por isso não compensa generalizar.

Joia. Seu exemplo foi legal, apesar de eu achar que o problema da "ginástica" pode ter sido falta de conhecimento pra fazer a coisa. Mas em fim, vamos aproveitar o gancho pra perguntar algumas coisas relevantes hoje em dia em relação a testes automatizados ....

- Como fazer testes automatizados em uma stored procedure?
- Da pra fazer um mock das tabelas pra testar de forma unitária?
- Carrega-se um banco vazio pra fazer testes?
- Cria-se uma procedure pra testar a outra?

Essas questões são interessantes, pois desenvolver sem testes automatizados atualmente não é considerado uma boa coisa.

This message was edited 1 time. Last update was at 10/09/2008 08:44:37


Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com

"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
marcosalex
GUJ Expert
[Avatar]

Membro desde: 20/02/2008 12:32:59
Mensagens: 3368
Offline

"

This message was edited 1 time. Last update was at 12/02/2009 07:10:45

[Yahoo!] aim icon [ICQ]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

marcosalex wrote:
Emerson Macedo wrote:
Quanto a manutenção mais facil quando o código está nas procedures, minha opinião é diferente. Acredito que nos objetos a manutenção seja mais fácil.


Passei por situações em que o código feito na procedure era 10% do código feito em Java e muito mais simples. Por isso julgo mais fácil a manutenção. Já vi situações de concorrência que tinha uma verdadeira ginástica em Java pra conseguir evitar incoerência do estoque de produtos com os estoques da loja. Foi substituído mais de 300 linhas de código por uma simples trigger de 5 linhas e funcionou com muito mais performance.

Bom, também já vi códigos que aconteceu exatamente o inverso, por isso não compensa generalizar.

Mas a maior desvantagem que vejo em deixar regras de negócio no banco é que não irão ficar todas as regras lá. Logo, você teria de dar manutenção em dois lugares, duas linguagens, duas plataformas,...


Em suma, se quiser o melhor dos dois mundos, você terá que trabalhar (balanceadamente) com ambos.

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
Emerson Macedo
Virtual Machine Man
[Avatar]

Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline

marcosalex wrote:Sobre testes automatizados, acho que o único SGBD que possui o recurso para stored procedures é o Oracle, mesmo assim tenho minhas dúvidas se consegue atender os mesmos objetivos que um teste na linguagem de programação.

Então nós concordamos que existe um problema relacionado a testabilidade para esse tipo de abordagem, certo?

marcosalex wrote:Mas um dos objetivos dos testes automatizados é garantir que não há falha na lógica de programação. Os bancos resolvem isso associando regras de integridade nas stored procedures. Exemplo: Se você disser que só pode fechar um pedido depois dos produtos serem baixados no estoque, o banco simplesmente não deixará.

Sim, mas de qualquer forma você tem que testar se a constraint que você criou está correta. A pergunta é: Como fazer isso? Você teria que manualmente rodar a procedure pra ver. Isso seria um trabalho manual e meio chato, o que é bem contrário ao objetivo dos testes automatizados.

This message was edited 1 time. Last update was at 10/09/2008 10:53:20


Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com

"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
GersonRoj
Smalltalk

Membro desde: 22/09/2006 15:31:18
Mensagens: 1
Offline

É obvio que a Oracle vai dizer que por questão de performance o melhor é que a regra de negocio esteja no banco e a Microsoft tambem segue o mesmo caminho, tambem é obvio que isto deixa a empresa refem do banco e isto eles não dizem.
Para um sistema pequeno da para engolir esta idéia, isto porque se no dia amanhã a empresa resolver adotar outro banco não será muito dificel migrar todas as regras, agora pense em sistema gigante integrado que contenha todas as regras no banco, como será para migrar para outro banco ?. Como Diretor / Gerente de TI é fundamental levantar esta questão porque tudo é função do orçamento que esta disponivel para comprar (licenças), manter (DBAs) este banco ou migrar para outro banco.
Sob o aspecto comercial, software para venda, o ideal é que as regras estejam em um framework para que o cliente possa escolher em qual base irá investir, se é que não comprou ainda. Tive clientes que me disseram: "tenho um servidor linux e quero uma base OpenSource!", neste caso minha salvação era que meu aplicativo não era dependente da base.
Os grandes ERP levam em consideração o lado do cliente e tambem deixa a base a criterio do cliente quando este já não possue uma.
leogazio
JavaBaby
[Avatar]

Membro desde: 07/01/2008 17:42:46
Mensagens: 75
Localização: Armação dos Búzios - R.J
Offline

Esse Emerson Macedo é um idiota! E arrogante ainda por cima...

Leonardo Gazio.
[Email] [WWW] [MSN]
YvGa
Virtual Machine Man

Membro desde: 07/03/2007 15:58:16
Mensagens: 517
Offline

leogazio wrote:Esse Emerson Macedo é um idiota! E arrogante ainda por cima...


Quatro anos depois voce nos trouxe uma ótima contribuicao. Valeu, aprendi muito com seu post.

Ah, e so pra constar, eu concordo com boa parte do que o Emerson disse ha quatro anos.

Paulo Borio
Mrizzo
Smalltalk

Membro desde: 26/01/2012 14:00:57
Mensagens: 3
Offline

Bom galera, com certeza é uma pessima pratica.

Mais tem uma variante que é o contexto, já aconteceu no inicio da carreira quando sabia menos do que sei hoje(rsrsrs) não tinha conhecimento tecnico suficiente e muito menos tempo para estudar uma solução descente e ter que resolver muitas coisas direto no banco. Sei lá acho que chicotear um desenvolvedor por algo que não foi bem feito é complicado.
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team