Modularização de sistemas em BPL, alguém trabalha com isso?
Desde já agradeço
[]s
Titanius
Respostas
Leonardoffsilva
18/06/2007
Minha aplicação ja esta com 12 mb e crescendo. Já enxuguei ao máximo.
Sei que tenho que partir para modularização.
Fico no aguardo tb.
Titanius
18/06/2007
[]s
Macario
18/06/2007
Isto também é do meu interesse.
Eu penso em fazer modularização e ainda criar um atualizador ai assim o sistema ERP aqui vai ficar bacana.
Vejam aqui o ERP esta ainda em Client/Server, como ser fazer modularização em um sistema N-tier? Será que é ´simples´ tambem?
:roll:
Titanius
18/06/2007
Simples digo que não é, mas a modularização em n-tier é mais complicada, se bem que você pode modularizar o Client, sem problemas.. agora o server é complicado, se você usa RDM e TPL, acho ser quase que impossível... de resto é igual ao modulo normal mesmo.
O problema é que estou tendo é o seguinte, imaginem a situação:
FrmBasic
- CadCliente
- CadFornecedor e etc..
Todos herdam a tela do FrmBasic.. ao meu ver e no meu estudo, se você modifica algo relevante no FrmBasic, voce tem que recompilar TODOS os BPLs que dele depende.
Outro ´ponto negativo´ é que se voce usa BPL, todas as BPLs de todos os componentes que você utiliza tem que ir junto...
[]s
Massuda
18/06/2007
Se não fosse assim, como seu programa e outros packages ficariam cientes das alterações feitas? Uma possível solução (muuuito mais complexa) seria você fazer carga dinamica dos packages e usar RTTI para descobrir propriedades/metodos das classes contidas nos packages... não arriscaria ir por esse caminho pois possivelmente o mecanismo de RTTI nativo do Delphi não seria suficiente para fazer isso.
Outra razão é que muitos packages requerem variáveis globais que só podem ser compartilhadas entre diferentes packages se estiverem em um package compartilhado pelos outros packages. Um exemplo disso são os packages do runtime do Delphi.
Macario
18/06/2007
Olá eu vejo isso como um processo normal, afinal estamos ´modularizando´ o aplicativo. Outro ponto é, as alterações em componentes ocorrem bem menos do que em nossos aplicativos, concordam?
8)
Renatacoimbra
18/06/2007
Tenho um ERP em módulos usando BPL, prometir em outro POST que escreveria um Artigo/Exemplo para disponibilizar para pessoal. se alguém tiver como disponibilizar os fontes em um servidor para todos terem acesso, manda um e-mail para sigdata@brturbo.com
[]´s
Titanius
18/06/2007
Olá Massuda, sim, sei que isso é uma limitação, e muito chata, não concorda? Se bem, que com a versão 2005 pra frente, você pode falar qual package requer outro, e por consequencia dar um build nele, automaticamente.
Eu meu ver, o Delphi poderia deixar um EXE normal, acessar um BPL, sem precisar marcar esta opção.
Justamente, mas pense como sendo um dos seguintes problemas: 1) Todos vão saber quais componentes você utiliza. 2) Dependendo da quantidade de componentes que você usa, você terá que enviar tudo pro cliente.
Renata tentei lhe enviar um email solicitando justamente isso, mas o email que eu tinha (o qual você enviou as imagens em TDI) não existe mais.
Renata, sei que seu ERP funciona em BPL, como você contornou estes problemas ditos até agora?
[]s
Macario
18/06/2007
Olá Renata boa tarde.
Sei de qual topico você se refere, que bom que ja tem o artigo. Que tal usar o rapidshare para postar o exemplo? Outra opção seria você indicar o seu artigo na seção da devmedia(pode ser que funcione..rs),afinal eles pedem isso sempre que mandemos artigos e tal.
[]´s 8)
Titanius
18/06/2007
Olá Renata boa tarde.
Sei de qual topico você se refere, que bom que ja tem o artigo. Que tal usar o rapidshare para postar o exemplo? Outra opção seria você indicar o seu artigo na seção da devmedia(pode ser que funcione..rs),afinal eles pedem isso sempre que mandemos artigos e tal.
[]´s 8)[/quote:0b4d4f9411]
Prefiro o Rapidshare ou semelhante, pois se enviar À DevMEdia, eles vão bloquear somente para assinantes.. :cry:
Macario
18/06/2007
Nesse precisamos melhorar tambem o metodo de distribuição, certo. No caso um instalador resolve o problema.
Não vejo problema em ´mostrar´ que componete é usado na aplicação( isso claro so sabera que trabalha com Delphi). E será que não da pra fazer uma ´Packejão´ contendo as BPL dos componentes?
:roll:
Titanius
18/06/2007
Infelizmente não tem como... se não tiver os BPLs já na pasta do exe ou no system32, não executa..
[]s
Renatacoimbra
18/06/2007
isso tá bem explicado no exemplo, qualquer dúvida/sugestão podemos discutir aqui mesmo no forum, daí todos serão beneficiados.
Segue o link para download:
[url]
http://rapidshare.com/files/37953664/Packages.zip
[/url]
[]´s
Macario
18/06/2007
legal em casa, vou baixar e ver, aqui na empresa não tenho acesso ao rapidshare (regras de firewall).
Renata, so por curiosidade, isto se aplica de qual a qual versão do Delphi?
:roll:
Renatacoimbra
18/06/2007
tenho um ERP com 4 RDM e muitos objetos visuais, classes de pesistencia e regras. um servidor de relatórios embutido e o EXE final não passa de 800KB
[]´s
Renatacoimbra
18/06/2007
mais funciona nas versões Win32 de 6 pra frente.
[]´s
Titanius
18/06/2007
Renata, seu ERP utiliza BSS?
Renatacoimbra
18/06/2007
Titanius
18/06/2007
Isso que eu queria te perguntar, desde que vi suas telas... vi lá que a primeira Aba é um Grid com os resultados, digo, com alguns resultados nele.. isso não torna o sistema meio lento não?
[]s
Massuda
18/06/2007
Macario
18/06/2007
Massuda então desta forma, num cenario com FormPrincipal, FormA, FormB.
Seu precisar atualizar apenas o FormA, será preciso que o Exe seja fechado para tal ação. E para solucionar isto seria a chamada dinamica que voce se referiu anteriormente?
Titanius
18/06/2007
Acredito ser este o pior do BPL Dinamico, ou tem como mudar isso?
[]s
Renatacoimbra
18/06/2007
Quanto as consultas, uso abas sim, tenho um grid que mostra o resultado das consultas, mais é controlado a qtde de registros retornados.
Exemplo para Banco de dados FireBird:
function TConsultaFirebird.getSQL: String; var SQL: TStringList; begin SQL := TStringList.Create; try SQL.Text := inherited getSQL; if getQtdRegistros > 0 then SQL[0] := SQL[0] + ´ first ´ + IntToStr(getQtdRegistros); if getSalto > 0 then SQL[0] := SQL[0] + ´ skip ´ + IntToStr(getSalto); Result := SQL.Text; finally SQL.Free; end; end;
Exemplo usando banco de dados PostgreSQL:
function TConsultaPostgreSQL.getSQL: String; var SQL: TStringList; begin SQL := TStringList.Create; try SQL.Text := inherited getSQL; if getQtdRegistros > 0 then SQL.Add(´limit ´ + IntToStr(getQtdRegistros)); if getSalto > 0 then SQL.Add(´offset ´ + IntToStr(getSalto)); Result := SQL.Text; finally SQL.Free; end; end;
[]´s
Titanius
18/06/2007
Então, no Server você tem vários EXE, cada um com seus RDM, é isso? cada EXE no Server é um Módulo...
[]s
Massuda
18/06/2007
Titanius
18/06/2007
É isso aí Massuda, BPL Dinamicos é o melhor caminho para não ficar preso, mas com isso daí que falei torna a utilização de BPL Dinamicos, inviáveis.
Mas voltando ao Estáticos.. no que você diz... Qualquer coisa Pública.. vamos supor que tenho um Form Básico, e tenho vários Forms herdados nele... vamos pensar em 2 possibilidades:
1) Vou no Básico e incluo um componente novo (Button, Label etc..).
2)Vou no Básico, e altero a programação no Evento de um Botão que já exista.
Em qual dos casos acima, tenho que recompilar todos os BPL que herdam o Pai?
[]s
Renatacoimbra
18/06/2007
[]´s
Titanius
18/06/2007
Entedi.. obrigado.
Massuda
18/06/2007
Titanius
18/06/2007
Edioilha
18/06/2007
Realmente este assunto é muito amplo, porem quando se trabalha com BPLs e Packages, alem da aplicaçao se tornar reutilizavel, fica muito profissional, robusta e com arquivos bem pequenos, tornando assim mais facil a atualizaçao da aplicaçao para usuario.
E muito mais...
De uma checada no [url=http://www.vytryny.com.br/artigos.aspx?type=group&query=2]Vitrini[/url]
Sao 8 video aulas Gratuitas de altissimo nivel.
Vale a pena. Cadastre-se para baixar os videos.
Vlw
Uildenei
18/06/2007
em primeiro lugar, quero agradecer pela nobre iniciativa de colocar um exemplo a disposicao do pessoal do forum.
segundo, li ele todinho ... compilei na minha maquina, tudo ok, a partir da ideia dele projetei toda a estrutura da minha aplicacao com seus devidos modulos, o modelo do banco, estrutura de fluxo de dados etc... no desenvolvimento me deparei com umas mensagens que foram alem dos meus conhecimentos no assunto de pacotes:
[DCC Warning] pctBase.dpk(48): W1033 Unit ´uFrConexao´ implicitly imported into package ´pctBase´
a referida unit esta dentro de um outro pacote onde tenho a rotina do tratamento da conexao com o banco de dados.
tem ideia do que deve ser feito nesse caso?
obrigado!
Asales
18/06/2007
Uildenei
18/06/2007
as aulas sao rapidinhas .. com o audio desencontrado em algumas .. mas da uma baita mao no assunto.
Emerson Nascimento
18/06/2007
resolveu?
Uildenei
18/06/2007
Rodc
18/06/2007
Uildenei
18/06/2007
esse trem de BPL ta me tirando do serio... fiz tudo conforme manda o figurino .. com a ajuda disponibilizada pela Renata, dicas do Titanium, as aulas do site da devmedia e mais umas quantas materias que encontrei na net.
o problema é que quando vou compilar alguns pacotes ele da um erro dizendo que nao encontrou o arquivo.DRF e nao encontrei o meio de acertar ... consegui fazer uma classe pra conexao.. fucniona em todos os pacotes ;... funcoes de exportação ..etc.. soh esse problema na compilação.
Marcio Silva
18/06/2007
isso tá bem explicado no exemplo, qualquer dúvida/sugestão podemos discutir aqui mesmo no forum, daí todos serão beneficiados.
Segue o link para download:
[url]
http://rapidshare.com/files/37953664/Packages.zip
[/url]
[]´s