Modularização de sistemas em BPL, alguém trabalha com isso?

Delphi

18/06/2007

Olá amigos, gostaria de saber se alguém aqui do Fórum trabalha com modularização em BPL, pois estou querendo usar, e queria tirar algumas dúvidas.

Desde já agradeço

[]s


Titanius

Titanius

Curtidas 0

Respostas

Leonardoffsilva

Leonardoffsilva

18/06/2007

Também estou querendo. Até agora não achei nenhum exemplo completo.
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.


GOSTEI 0
Titanius

Titanius

18/06/2007

Olá Leonardo, eu conheço bem a técnica do BPL, porém tenho dúvidas quanto a viabilidade dela. Todos acham que é o mar de rosas, mas se for do jeito que eu sei, complica demais a vida de nós programadores.

[]s


GOSTEI 0
Macario

Macario

18/06/2007

Olá.

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:


GOSTEI 0
Titanius

Titanius

18/06/2007

Olá. 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:


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


GOSTEI 0
Massuda

Massuda

18/06/2007

...se você modifica algo relevante no FrmBasic, voce tem que recompilar TODOS os BPLs que dele depende.
Essa é uma ´limitação´ dos packages... Se você altera a parte pública de um package (itens declarados como públicos/publicados nas classes) isso afeta o modo como outros packages (e seu programa) interagem com o package alterado.

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.

...se voce usa BPL, todas as BPLs de todos os componentes que você utiliza tem que ir junto...
Uma razão para isso acontecer é que você pode ter especificado alguns packages que seu programa/package não utiliza na opção [b:da4c284045]Project|Options|Package|Runtime Packages[/b:da4c284045] e, infelizmente, o compilador gera código que checa a presença desses packages. O compilador não tem como verificar se um package é realmente necessário para seu programa/package pois isso só pode ser testado em runtime.

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.


GOSTEI 0
Macario

Macario

18/06/2007

Outro ´ponto negativo´ é que se voce usa BPL, todas as BPLs de todos os componentes que você utiliza tem que ir junto... []s


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)


GOSTEI 0
Renatacoimbra

Renatacoimbra

18/06/2007

Olá Pessoal !

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


GOSTEI 0
Titanius

Titanius

18/06/2007

Essa é uma ´limitação´ dos packages... Se você altera a parte pública de um package (itens declarados como públicos/publicados nas classes) isso afeta o modo como outros packages (e seu programa) interagem com o package alterado.


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.

Uma razão para isso acontecer é que você pode ter especificado alguns packages que seu programa/package não utiliza na opção Project|Options|Package|Runtime Packages e, infelizmente, o compilador gera código que checa a presença desses packages. O compilador não tem como verificar se um package é realmente necessário para seu programa/package pois isso só pode ser testado em runtime.


Eu meu ver, o Delphi poderia deixar um EXE normal, acessar um BPL, sem precisar marcar esta opção.

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?

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.

Olá Pessoal ! 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


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


GOSTEI 0
Macario

Macario

18/06/2007

Olá Pessoal ! 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


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)


GOSTEI 0
Titanius

Titanius

18/06/2007

[quote:0b4d4f9411=´RenataCoimbra´]Olá Pessoal ! 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


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:


GOSTEI 0
Macario

Macario

18/06/2007

Olá.

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:


GOSTEI 0
Titanius

Titanius

18/06/2007

Olá. 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:


Infelizmente não tem como... se não tiver os BPLs já na pasta do exe ou no system32, não executa..

[]s


GOSTEI 0
Renatacoimbra

Renatacoimbra

18/06/2007

Não tenho problemas na distribuição pois não uso componentes de terceiros, tenho um só Package contendo as minhas classes/componentes, os mesmos ficam dentro de um package_pai.

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


GOSTEI 0
Macario

Macario

18/06/2007

Olá.

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:


GOSTEI 0
Renatacoimbra

Renatacoimbra

18/06/2007

Vir algo sobre modularizar o Servidor da aplicação, não vejo necesidade, usando boas prática de programação o EXE ou DLL ficam bem pequenas.

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


GOSTEI 0
Renatacoimbra

Renatacoimbra

18/06/2007

Os exemplos foram compilados em Delphi 7 e 2007.

mais funciona nas versões Win32 de 6 pra frente.


[]´s


GOSTEI 0
Titanius

Titanius

18/06/2007

Vir algo sobre modularizar o Servidor da aplicação, não vejo necesidade, usando boas prática de programação o EXE ou DLL ficam bem pequenas. 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


Renata, seu ERP utiliza BSS?


GOSTEI 0
Renatacoimbra

Renatacoimbra

18/06/2007

Sim, BSS e WebService.


GOSTEI 0
Titanius

Titanius

18/06/2007

Ué.. então você modularizou somente o Client? Eu tentei achar algo pra modularizar o Server e não funcionou.. :(

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


GOSTEI 0
Massuda

Massuda

18/06/2007

Eu meu ver, o Delphi poderia deixar um EXE normal, acessar um BPL, sem precisar marcar esta opção.
Como o Delphi faz um link estático entre o BPL e o programa, o package é carregado na inicialização do programa, mesmo que ele não seja usado.


GOSTEI 0
Macario

Macario

18/06/2007

[quote:df15a3df21=´titanius´]Eu meu ver, o Delphi poderia deixar um EXE normal, acessar um BPL, sem precisar marcar esta opção.
Como o Delphi faz um link estático entre o BPL e o programa, o package é carregado na inicialização do programa, mesmo que ele não seja usado.[/quote:df15a3df21]

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?


GOSTEI 0
Titanius

Titanius

18/06/2007

Acredito que packages dinamicos, temos um problema, por ser dinamico, não conseguimos mostrar os DataSets, então tudo tem que ser feito na mão, nada de Dois Cliques no DataSet e pegar os Fields, relatórios? nem pensar...

Acredito ser este o pior do BPL Dinamico, ou tem como mudar isso?

[]s


GOSTEI 0
Renatacoimbra

Renatacoimbra

18/06/2007

Então Titanius, não vejo necessidade de modularizar o servidor usando Packages, se vc quer divider em módulos pode ser feito em EXE ou DLL mesmo, dar forma q é compilado o seu servidor.

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


GOSTEI 0
Titanius

Titanius

18/06/2007

Então Titanius, não vejo necessidade de modularizar o servidor usando Packages, se vc quer divider em módulos pode ser feito em EXE ou DLL mesmo, dar forma q é compilado o seu servidor. []´s


Então, no Server você tem vários EXE, cada um com seus RDM, é isso? cada EXE no Server é um Módulo...

[]s


GOSTEI 0
Massuda

Massuda

18/06/2007

...por ser dinamico, ... tudo tem que ser feito na mão...
Exatamente.

Acredito ser este o pior do BPL Dinamico, ou tem como mudar isso?
Não tem como mudar isso, pois o funcionamento de tudo que você fez com o mouse na IDE (pegar fields, etc) é garantido pelo fato do vínculo ser estático, ou seja, quando o form/data module for criado o BPL com certeza já foi carregado na inicialização do programa.


GOSTEI 0
Titanius

Titanius

18/06/2007

Não tem como mudar isso, pois o funcionamento de tudo que você fez com o mouse na IDE (pegar fields, etc) é garantido pelo fato do vínculo ser estático, ou seja, quando o form/data module for criado o BPL com certeza já foi carregado na inicialização do programa.


É 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


GOSTEI 0
Renatacoimbra

Renatacoimbra

18/06/2007

Não é o meu caso, meu aplicativo servidor é só um EXE, mais no caso de modularizar esse seria o melhor caminho.

[]´s


GOSTEI 0
Titanius

Titanius

18/06/2007

Não é o meu caso, meu aplicativo servidor é só um EXE, mais no caso de modularizar esse seria o melhor caminho. []´s


Entedi.. obrigado.


GOSTEI 0
Massuda

Massuda

18/06/2007

1) Vou no Básico e incluo um componente novo (Button, Label etc..).
Você alterou a parte published, este package e todos que dependem dele precisam ser recompilados.

2)Vou no Básico, e altero a programação no Evento de um Botão que já exista.
A alteração é ´interna´, não mudou a parte public/published, você só precisa recompilar o package.


GOSTEI 0
Titanius

Titanius

18/06/2007

Entendi.. de certo ponto isso até que é bom.. 8) Forms Básico geralmente não são mudados o tempo todo....


GOSTEI 0
Edioilha

Edioilha

18/06/2007

Ola pessoal!
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


GOSTEI 0
Uildenei

Uildenei

18/06/2007

Renata,

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!


GOSTEI 0
Asales

Asales

18/06/2007

No site da ClubeDelphi estão disponível 8 vídeo-aulas sobre o uso de bpls para quem se interessar.


GOSTEI 0
Uildenei

Uildenei

18/06/2007

Valeu guri,

as aulas sao rapidinhas .. com o audio desencontrado em algumas .. mas da uma baita mao no assunto.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

18/06/2007

[...] 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´


resolveu?


GOSTEI 0
Uildenei

Uildenei

18/06/2007

ainda nao implementei tudo mas creio que vou conseguir resolver sim,,


GOSTEI 0
Rodc

Rodc

18/06/2007

O uso de BPL é seguro? Outros programadores conseguem pegar os meus BPLs e descobrir meu código fonte? Ou mesmo fazer uso do meu bpl nos programas deles?


GOSTEI 0
Uildenei

Uildenei

18/06/2007

Galera,

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.


GOSTEI 0
Marcio Silva

Marcio Silva

18/06/2007

Ola, se puder disponibilizar link novamente, agradeco.


Não tenho problemas na distribuição pois não uso componentes de terceiros, tenho um só Package contendo as minhas classes/componentes, os mesmos ficam dentro de um package_pai.

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


GOSTEI 0
POSTAR