[opnião] ClientDataSets são realmente necessários?
[Simplificando seu trabalho]
Gostaria das opiniões de programadores experientes para um método utilizado por muitos e que é questionável...
As opiniões aqui servirão de forma didática para outros e inclusive para mim também, caso minha opinião esteja equivocada...
Nossa equipe construiu um sistema ERP robusto (3 camadas) cujo executável ficou com cerca de 15mb utilizando exclusivamente componente de acesso ´SimpleDataSet (DBEXPRESS)´, com banco de dados SQL SERVER 2005 e volume inicial da base com 320MB.
Construímos sem qualquer ´ClientDataSet e/ou DataSetProvider´.
Há tempos queriamos migrar nossa aplicação de ZEOSLIB para DBEXPRESS (DBEXPRESS é nativo do Delphi) que rodava apenas local e com um executável de 10MB.
O que nos desanimava era a questão dos exemplos que eu viamos por aí... e o que ensinam nos cursos de Delphi, para cada componente de acesso dbexpress (SQLQuery) tinha que adicionar um ClientDataSet vinculado a um DataSetProvider... então para acessar uma simples tabela (clientes, estoque, etc...) teria que utilizar 3 componentes ao invés de 1:
1) SQLQuery
2) ClientDataSet
3) DataSetProvider
As vezes eu “acho&8221; que existe um certo PARADIGMA entre os programadores: fazem porque aprenderam assim, mas não sabem quem inventou. É como aquela experiência cientifica que fizeram com macacos, onde eles batiam uns nos outros quando um deles tentava pegar o balde... não sabiam porque batiam, e os outros não sabiam porque apanhavam, na cabeça deles tinham que bater ou tinham que apanhar...
Então eis as minhas perguntas:
[b:9f8be7e1bf]- UTILIZANDO O MÉTODO ´TRADICIONAL´ (SQLQuery/ClientDataSet/DataSetProvider) NÃO ATRAPALHA A PRODUÇÃO DE UM SOFTWARE BANCO DE DADOS?
[/b:9f8be7e1bf]
[b:9f8be7e1bf]- NÃO SE PERDE TEMPO USANDO METODOS QUE ´APARENTEMENTE´ SÃO DESNECESSÁRIOS ?!
[/b:9f8be7e1bf]
Como eu disse, precisávamos achar uma forma de utilizar o dbexpress sem ter que ficar utilizando 3 componentes para acessar uma simples tabela. E o que nos chamou a atenção foi o ´SimpleDataSet´ que também trabalha com método de cursor bi-direcional permitindo até mesmo usar DBGRID e NAVIGATOR (livremente). E melhor ainda: Utilizar tabelas MESTRE/DETALHE simplesmente com componentes ´SimpleDataSet e Datasource´ !!!
Para não cometermos um trágico ´ERRO DE PROJETO´ e ter a certeza ABSOLUTA antes de dar esse importante passo para a reconstrução de um novo sistema, os testes foram realizados MySQL 5, SQL-SERVER 2005 e ORACLE 10 utilizando conexão local e via internet com serviço de IP fixo. Os testes foram exaustivos e os resultados foram e são satisfatórios!
No intuito de fazer com que outros programadores ou que sua equipe não perca mais o PRECIOSO TEMPO com métodos que aprenderam com alguém na internet ou em algum curso, façam os testes no intuito de “minimizar&8221; a mão de obra e aproveitar melhor o tempo empregado por sua equipe.
Talvez &8220;você&8221; tenha aprendido num tutorial da internet sobre como utilizar DBEXPRESS e utiliza até hoje uma forma trabalhosa quando na verdade poderia simplificar seu trabalho.
Talvez seu projeto que possa levar 8 meses para desenvolver seguindo métodos e &8220;idéias obsoletas&8221; de terceiros, poderá ser desenvolvido em 5 meses utilizando métodos simples, objetivos e eficazes de programação.
Bem, agora a opinião de todos e para minha curiosidade também: Em que condições o DBEXPRESS com ´ClientDataSet e DataSetProvider´ são realmente necessários a ponto de causar tamanho trabalho para uma equipe?
[i:9f8be7e1bf]Enfatizando alguns pontos do sistema que construímos:
- Banco de Dados SQL SERVER 2005
- O sistema traz somente o que o usuário solicitar (sem aquele erro de muitos programadores que trazem 100.000 registros para memória quando deveria trazer apenas 1)
- Roda via internet interligando matriz e 8 filiais em diferentes estados do Brasil
- Utilizando somente “SimpleDataSet&8221; e &8220;DataSource&8221;
[/i:9f8be7e1bf]
Isso é uma opinião pessoal e sua opnião é muito importante.
COMENTÁRIOS ?
Gostaria das opiniões de programadores experientes para um método utilizado por muitos e que é questionável...
As opiniões aqui servirão de forma didática para outros e inclusive para mim também, caso minha opinião esteja equivocada...
Nossa equipe construiu um sistema ERP robusto (3 camadas) cujo executável ficou com cerca de 15mb utilizando exclusivamente componente de acesso ´SimpleDataSet (DBEXPRESS)´, com banco de dados SQL SERVER 2005 e volume inicial da base com 320MB.
Construímos sem qualquer ´ClientDataSet e/ou DataSetProvider´.
Há tempos queriamos migrar nossa aplicação de ZEOSLIB para DBEXPRESS (DBEXPRESS é nativo do Delphi) que rodava apenas local e com um executável de 10MB.
O que nos desanimava era a questão dos exemplos que eu viamos por aí... e o que ensinam nos cursos de Delphi, para cada componente de acesso dbexpress (SQLQuery) tinha que adicionar um ClientDataSet vinculado a um DataSetProvider... então para acessar uma simples tabela (clientes, estoque, etc...) teria que utilizar 3 componentes ao invés de 1:
1) SQLQuery
2) ClientDataSet
3) DataSetProvider
As vezes eu “acho&8221; que existe um certo PARADIGMA entre os programadores: fazem porque aprenderam assim, mas não sabem quem inventou. É como aquela experiência cientifica que fizeram com macacos, onde eles batiam uns nos outros quando um deles tentava pegar o balde... não sabiam porque batiam, e os outros não sabiam porque apanhavam, na cabeça deles tinham que bater ou tinham que apanhar...
Então eis as minhas perguntas:
[b:9f8be7e1bf]- UTILIZANDO O MÉTODO ´TRADICIONAL´ (SQLQuery/ClientDataSet/DataSetProvider) NÃO ATRAPALHA A PRODUÇÃO DE UM SOFTWARE BANCO DE DADOS?
[/b:9f8be7e1bf]
[b:9f8be7e1bf]- NÃO SE PERDE TEMPO USANDO METODOS QUE ´APARENTEMENTE´ SÃO DESNECESSÁRIOS ?!
[/b:9f8be7e1bf]
Como eu disse, precisávamos achar uma forma de utilizar o dbexpress sem ter que ficar utilizando 3 componentes para acessar uma simples tabela. E o que nos chamou a atenção foi o ´SimpleDataSet´ que também trabalha com método de cursor bi-direcional permitindo até mesmo usar DBGRID e NAVIGATOR (livremente). E melhor ainda: Utilizar tabelas MESTRE/DETALHE simplesmente com componentes ´SimpleDataSet e Datasource´ !!!
Para não cometermos um trágico ´ERRO DE PROJETO´ e ter a certeza ABSOLUTA antes de dar esse importante passo para a reconstrução de um novo sistema, os testes foram realizados MySQL 5, SQL-SERVER 2005 e ORACLE 10 utilizando conexão local e via internet com serviço de IP fixo. Os testes foram exaustivos e os resultados foram e são satisfatórios!
No intuito de fazer com que outros programadores ou que sua equipe não perca mais o PRECIOSO TEMPO com métodos que aprenderam com alguém na internet ou em algum curso, façam os testes no intuito de “minimizar&8221; a mão de obra e aproveitar melhor o tempo empregado por sua equipe.
Talvez &8220;você&8221; tenha aprendido num tutorial da internet sobre como utilizar DBEXPRESS e utiliza até hoje uma forma trabalhosa quando na verdade poderia simplificar seu trabalho.
Talvez seu projeto que possa levar 8 meses para desenvolver seguindo métodos e &8220;idéias obsoletas&8221; de terceiros, poderá ser desenvolvido em 5 meses utilizando métodos simples, objetivos e eficazes de programação.
Bem, agora a opinião de todos e para minha curiosidade também: Em que condições o DBEXPRESS com ´ClientDataSet e DataSetProvider´ são realmente necessários a ponto de causar tamanho trabalho para uma equipe?
[i:9f8be7e1bf]Enfatizando alguns pontos do sistema que construímos:
- Banco de Dados SQL SERVER 2005
- O sistema traz somente o que o usuário solicitar (sem aquele erro de muitos programadores que trazem 100.000 registros para memória quando deveria trazer apenas 1)
- Roda via internet interligando matriz e 8 filiais em diferentes estados do Brasil
- Utilizando somente “SimpleDataSet&8221; e &8220;DataSource&8221;
[/i:9f8be7e1bf]
Isso é uma opinião pessoal e sua opnião é muito importante.
COMENTÁRIOS ?
Moura
Curtidas 0
Respostas
Marco Salles
22/05/2007
Bem, agora a opinião de todos e para minha curiosidade também: Em que condições o DBEXPRESS com ´ClientDataSet e DataSetProvider´ são realmente necessários a ponto de causar tamanho trabalho para uma equipe?
em aplicaçoes multicamadas , aonde se separa a lógica de negócio e regras de acesso a banco de dados das regras de interface de usuário.
O SimpleDataSet é indicado para para criação de aplicações simples e protótipos.
Quando eu digo simples , eu não quero dizer quanto ao conteudo do aplicativo , mas sim quanto a sua arquitetura... Se voce usa o ClientDataSet um eventual migração é muito mais facilitada
GOSTEI 0
Jurandi
22/05/2007
Caro,
Normalmente o melhor método é aquele que conhecemos profundamente,mas isso não quer dizer que não estejamos abertos a introdução de novas tecnologias/métodos de fazer as coisas.
Quanto ao TSqlDataSet+DataSetProvider+ClientDataSet, possui implementações que, acho que vale a pena conhecer como:
Permite a realização de consultas em várias tabelas (joins) podendo ser especificado apenas os campos querão atualizaveis, especificação dos campos chaves quando delete ou update com otimização da execução.
Cabe aos profissionaisl envolvidos no projeto determinar a estruturação adequada dos módulos do sistema para garantir eficiencia e desempenho no desenvolvimento dos sistema.No site da Borland e na Internet tem bastante artigos sobre o assunto.
Sugiro que observe e pesquise bastante cada propriedade dos componentes citados.
Eu, particularmente, uso TSqlDataSet+DataSetProvider nos modulos de dados com e ClienteDataSet nos forms assinalando em runtime o provider dos mesmos.
Sds
Normalmente o melhor método é aquele que conhecemos profundamente,mas isso não quer dizer que não estejamos abertos a introdução de novas tecnologias/métodos de fazer as coisas.
Quanto ao TSqlDataSet+DataSetProvider+ClientDataSet, possui implementações que, acho que vale a pena conhecer como:
Permite a realização de consultas em várias tabelas (joins) podendo ser especificado apenas os campos querão atualizaveis, especificação dos campos chaves quando delete ou update com otimização da execução.
Cabe aos profissionaisl envolvidos no projeto determinar a estruturação adequada dos módulos do sistema para garantir eficiencia e desempenho no desenvolvimento dos sistema.No site da Borland e na Internet tem bastante artigos sobre o assunto.
Sugiro que observe e pesquise bastante cada propriedade dos componentes citados.
Eu, particularmente, uso TSqlDataSet+DataSetProvider nos modulos de dados com e ClienteDataSet nos forms assinalando em runtime o provider dos mesmos.
Sds
GOSTEI 0
Macario
22/05/2007
SQLDataset+DataSetProvider+ClientDataSet+DataSource
Esse é o meu time..rs
Taí eu fiquei surpreso com a declaração do nosso colega moura. Sempre vi e li nas literarutaras que SimpleDataSet não era indicado para aplicações N-tier, entre os argumentos devido a problemas com Pool de conexões.
Bom como não programo pra N-tier vou so observar. :roll:
Valeu.
Esse é o meu time..rs
Taí eu fiquei surpreso com a declaração do nosso colega moura. Sempre vi e li nas literarutaras que SimpleDataSet não era indicado para aplicações N-tier, entre os argumentos devido a problemas com Pool de conexões.
Bom como não programo pra N-tier vou so observar. :roll:
Valeu.
GOSTEI 0
Moura
22/05/2007
Caros colegas,
Desde a faculdade em 1996 (curso de Processamento de Dados) eu já buscava alternativas de desenvolvimento (por isso ao largar o Clipper aptei pelo Delphi). Lembram-se do [i:aa3ec7dc73]BUG DO MILENIO[/i:aa3ec7dc73]? Aconteceu simplesmente porque adotou-se o metodo de ano com 2 digitos e a grande maioria foi atras dessa ideia... lembram-se dos resultados? Todo mundo se lembra!!
Quanto aos componente em questão eu sou uns do defensores dessa junção de ferramentas: dbExpress+(DataSetProvider+ClientDataSet).
Juntos são ferramentas poderosas!!!
O que enfatizo aqui não é o componente ´SimpleDataSet´, mas sim a busca de alternativas satisfatórias. Que fujam de metologias proveniente de ´ideias coletivas´. Quando alguem ´inventou´ uma forma de trabalho e todos acharem erroneamente que só existe aquele metodo de trabalho.
Na intenção de somemente contribuir com conhecimentos na orientação dos que vão desenvolver um novo sistema a partir de hoje, que façam testes com metodos diferentes de trabalhos. Se não querem usar ´SimpleDataSet´, tudo bem! Mas desde que não se prendam em ´ideias coletivas´ e procurem alternativas de programação que trazem os mesmos resultados e diminuem o tempo de trabalho.
Enfatizo tambem que todos devem estudar, trabalhar para melhor qualidade de programação. Todos nós sabemos que ´Tempo´ é dinheiro. Muitos aqui são pais de familia, empresarios e sabem que a busca de alternativas de programação/trabalho significa melhor satisfação financeira. E menos dor de cabeça com suporte, lá na frente.
Nao questiono as funcionalidades do dbExpress+(DataSetProvider+ClientDataSet), tão pouco questionarei quem faça uso desses poderosos componentes.
O que me intriga e não concordo é usar um monte de componentes para obter os ´mesmos´ resultados.
Eu ví muitas materias dizendo que ´SimpleDataSet´ não era apropriado para ambiente client/server e/ou 3 camadas e ainda mais utilizando em conexão remota como é o nosso caso aqui na empresa.
Mas como tenho opnião propria e não me deixo levar raciocionios coletivos, resolvi fazer testes para ter certeza que realmente não daria certo mesmo. E acreditem, me surpreendi com os resultados.
Pensei comigo: -Imagine se eu tivesse ido pelas ideias de outros, quão trabalhoso teria sido nosso trabalho!
Fizemos testes sim ´TClientDataSet+TDataSetProvider´ e fizemos testes com o TSQLQuery, TSQLDataSet e TSimpleDataSet. Claro que o metodo de programação difere do ClientDataSet... os resultados foram os mesmos. Tanto em velocidade de conexão quanto em tempo de resposta.
Por isso minha pergunta neste topico: ´[b:aa3ec7dc73]ClientDataSets são realmente necessários?[/b:aa3ec7dc73]´
Posso até reformular minha pergunta: ´ [b:aa3ec7dc73]Existem outros metodos de programações com dbExpress para client/server e 3 camadas que não sejam somente ClientDataSets?[/b:aa3ec7dc73]´
Foi o que eu pensava durante meses: -será que não existe outro metódo de programação que diminua o tempo de produção e ter os mesmos resultados satisfatório do TClientDataSet+TDataSetProvider?
:)
Continuem enviando comentários para que possamos trocar conhecimentos e para que a maioria tirem o maximo de proveito.
Desde a faculdade em 1996 (curso de Processamento de Dados) eu já buscava alternativas de desenvolvimento (por isso ao largar o Clipper aptei pelo Delphi). Lembram-se do [i:aa3ec7dc73]BUG DO MILENIO[/i:aa3ec7dc73]? Aconteceu simplesmente porque adotou-se o metodo de ano com 2 digitos e a grande maioria foi atras dessa ideia... lembram-se dos resultados? Todo mundo se lembra!!
Quanto aos componente em questão eu sou uns do defensores dessa junção de ferramentas: dbExpress+(DataSetProvider+ClientDataSet).
Juntos são ferramentas poderosas!!!
O que enfatizo aqui não é o componente ´SimpleDataSet´, mas sim a busca de alternativas satisfatórias. Que fujam de metologias proveniente de ´ideias coletivas´. Quando alguem ´inventou´ uma forma de trabalho e todos acharem erroneamente que só existe aquele metodo de trabalho.
Na intenção de somemente contribuir com conhecimentos na orientação dos que vão desenvolver um novo sistema a partir de hoje, que façam testes com metodos diferentes de trabalhos. Se não querem usar ´SimpleDataSet´, tudo bem! Mas desde que não se prendam em ´ideias coletivas´ e procurem alternativas de programação que trazem os mesmos resultados e diminuem o tempo de trabalho.
Enfatizo tambem que todos devem estudar, trabalhar para melhor qualidade de programação. Todos nós sabemos que ´Tempo´ é dinheiro. Muitos aqui são pais de familia, empresarios e sabem que a busca de alternativas de programação/trabalho significa melhor satisfação financeira. E menos dor de cabeça com suporte, lá na frente.
Nao questiono as funcionalidades do dbExpress+(DataSetProvider+ClientDataSet), tão pouco questionarei quem faça uso desses poderosos componentes.
O que me intriga e não concordo é usar um monte de componentes para obter os ´mesmos´ resultados.
Eu ví muitas materias dizendo que ´SimpleDataSet´ não era apropriado para ambiente client/server e/ou 3 camadas e ainda mais utilizando em conexão remota como é o nosso caso aqui na empresa.
Mas como tenho opnião propria e não me deixo levar raciocionios coletivos, resolvi fazer testes para ter certeza que realmente não daria certo mesmo. E acreditem, me surpreendi com os resultados.
Pensei comigo: -Imagine se eu tivesse ido pelas ideias de outros, quão trabalhoso teria sido nosso trabalho!
Fizemos testes sim ´TClientDataSet+TDataSetProvider´ e fizemos testes com o TSQLQuery, TSQLDataSet e TSimpleDataSet. Claro que o metodo de programação difere do ClientDataSet... os resultados foram os mesmos. Tanto em velocidade de conexão quanto em tempo de resposta.
Por isso minha pergunta neste topico: ´[b:aa3ec7dc73]ClientDataSets são realmente necessários?[/b:aa3ec7dc73]´
Posso até reformular minha pergunta: ´ [b:aa3ec7dc73]Existem outros metodos de programações com dbExpress para client/server e 3 camadas que não sejam somente ClientDataSets?[/b:aa3ec7dc73]´
Foi o que eu pensava durante meses: -será que não existe outro metódo de programação que diminua o tempo de produção e ter os mesmos resultados satisfatório do TClientDataSet+TDataSetProvider?
:)
Continuem enviando comentários para que possamos trocar conhecimentos e para que a maioria tirem o maximo de proveito.
GOSTEI 0
Max2006
22/05/2007
Estou aprendendo DBExpress e uma das informações que eu obtive a foi que ele tinha um bug que se o simpledataset se estiver em um data module e o sqlconnection estiver em outro datamodule e eu abrir o datamodule do simpledataset primeiro que o datamodule do sqsconnection a propriedade que faz conecção do componente simpledataset com o sqlconection simplesmente limpava a sua propriedade de conecção. Isso acontecia no Delphi 7 segundo minhas informações, não sei se isso acontece com as versões posteriores do Delphi. Mas isso eu acredito que pode ser resolvido preenche esta propriedade do componente SimpleDataSet em tempo de execução.
Estou com Turbo Delphi Explorer conhecendo este componente. E acredito que possa ser usardo de outras formas como vc diz. Como com o Delphi pode-se criar seus próprios componentes e até mesmo altera-lo então é so melhora-lo em alguns ítens. Estou apostando no DBExpress pois com ele pode-se trabalhar com vários bancos de dados com o mesmo componente, isso ajuda muito.
O SimpleDataSet tem muitos mais eventos que o Provider.
Esses eventos citados aqui a baixo são os únicos que tem no provider e não no simpledataset apartir do ´Turbo Delphi 2006´, não sei como está este componente no Delphi 2007.
Eventos do Provider: AfterUpdateRecord, BeforeUpdateRecord, DataRequest, GetData, GetDataSetProperties, GetTableName, UpdateData, UpdateError, Validate.
Estou com Turbo Delphi Explorer conhecendo este componente. E acredito que possa ser usardo de outras formas como vc diz. Como com o Delphi pode-se criar seus próprios componentes e até mesmo altera-lo então é so melhora-lo em alguns ítens. Estou apostando no DBExpress pois com ele pode-se trabalhar com vários bancos de dados com o mesmo componente, isso ajuda muito.
O SimpleDataSet tem muitos mais eventos que o Provider.
Esses eventos citados aqui a baixo são os únicos que tem no provider e não no simpledataset apartir do ´Turbo Delphi 2006´, não sei como está este componente no Delphi 2007.
Eventos do Provider: AfterUpdateRecord, BeforeUpdateRecord, DataRequest, GetData, GetDataSetProperties, GetTableName, UpdateData, UpdateError, Validate.
GOSTEI 0
Gilberto Fernandes
22/05/2007
Moura,
qdo começamos a desenvolver os aplicativos da nossa empresa eu passei por essa situação, cheguamos a iniciar o desenvolvimento com os componentes da maneira ´coletiva´ como vc disse, mas depois mudamos para o simpledataset, pq como o próprio nome diz é mais simples. Nos atende perfeitamente. Porém reparei que qdo se usa uma conexão remota, por vpn no caso, a um certa queda de performance que não sei dizer se estivesse usando do outro metodo seria menos evidente.
Agora, que estamos em inicio de desenvolvimento para desenvolver para web, vamos usar 3 camadas, aí vamos usar SQLDataset+DataSetProvider+ClientDataSet+DataSource, tendo uma aplicação desktop e uma web acessando o BD através da aplicação servidora.
qdo começamos a desenvolver os aplicativos da nossa empresa eu passei por essa situação, cheguamos a iniciar o desenvolvimento com os componentes da maneira ´coletiva´ como vc disse, mas depois mudamos para o simpledataset, pq como o próprio nome diz é mais simples. Nos atende perfeitamente. Porém reparei que qdo se usa uma conexão remota, por vpn no caso, a um certa queda de performance que não sei dizer se estivesse usando do outro metodo seria menos evidente.
Agora, que estamos em inicio de desenvolvimento para desenvolver para web, vamos usar 3 camadas, aí vamos usar SQLDataset+DataSetProvider+ClientDataSet+DataSource, tendo uma aplicação desktop e uma web acessando o BD através da aplicação servidora.
GOSTEI 0
Cabelo
22/05/2007
Colega...
Se o problema é a junção dos componentes em Design - Time, sugiro a você utilizar esta ferramenta poderosa que é a junção do SQLQuery+DataSetProvider+ClientDataSet+DataSource...
Criei um componente chamado DataSet que junta eses componentes encapsulados somente em um... indico o SQLConnection e ele me retorna tanto um dataset como um datasource, dependendo da propriedade DataSource que é do tipo boolean...
Sou totalmente adepto a essa forma de programação... perdí um ou dois dias na criação deste componente e uso ele em todos os projetos aqui da empresa.... funciona muito bem ..
um abraço..
Se o problema é a junção dos componentes em Design - Time, sugiro a você utilizar esta ferramenta poderosa que é a junção do SQLQuery+DataSetProvider+ClientDataSet+DataSource...
Criei um componente chamado DataSet que junta eses componentes encapsulados somente em um... indico o SQLConnection e ele me retorna tanto um dataset como um datasource, dependendo da propriedade DataSource que é do tipo boolean...
Sou totalmente adepto a essa forma de programação... perdí um ou dois dias na criação deste componente e uso ele em todos os projetos aqui da empresa.... funciona muito bem ..
um abraço..
GOSTEI 0