Pergunta

Eu estou tentando dividir minha monolítico, app Delphi-Win32 em bibliotecas, assim que eu conseguir algumas perguntas em torno de como compartilhar variáveis ??globais e objeto entre meus bibliotecas usando Delphi 2009. Por exemplo, eu tenho 3 objetos globais (derivado de TObject): para informação do utilizador, para informações sessão atual, e para armazenar a conexão banco de dados ativo e gerenciamento de operações com este banco de dados. Meus bibliotecas exigem para trabalhar com esses objetos. Além disso, certos bibliotecas daria um objecto derivado da TForm para ser alojado para outro controlo parental para a forma principal. Cada objecto derivados de TForm passou para a forma principal tem os seus próprios métodos e propriedades, ou seja, as suas classes são diferentes uns dos outros.

Eu estou pensando para colocar os objetos globais em uma biblioteca separada, mas eu acho que faria as coisas mais difíceis, mas considerá-lo, por favor.

Como começar a trabalhar esta situação?

Uma pergunta mais, o que é melhor usar: estática ou carregamento dinâmico de bibliotecas? Você pode recomendar alguns livros ou sites para saber mais sobre isso?

Agradecemos antecipadamente.

Foi útil?

Solução

O que temos feito no passado para variáveis ??de acções entre os módulos (usamos BPLs) foi para passá-los através de um TStringList compartilhada. De um modo geral, é melhor ter um objeto global compartilhada com todas as suas variáveis ??compartilhadas na mesma.

Qualquer coisa que vai ser referenciado entre mais de uma biblioteca deve ser em sua própria biblioteca . conselho de Mason era som .

Vá com carga estática, a menos que você realmente precisa dinâmica por algum motivo específico (o que não soa como). Deixe a troca gerenciador de memória janelas fora bibliotecas desnecessários da memória.

Uma dica de alguém que conseguiu uma grande divisão aplicação em várias bibliotecas. Tivemos nossos componentes em pacotes, o VCL, algumas rotinas comuns de aplicação, e, em seguida, uma biblioteca para cada "tela" ou segmento da aplicação. Para alterações nas telas, era possível apenas para liberar que uma biblioteca atualizada, mas por alterações em qualquer dos outros tipos de bibliotecas, descobrimos que normalmente teve que redeploy tudo. Por isso, foi rara que beneficiou de uma vantagem a partir da configuração.

Outras dicas

Parece que por "bibliotecas" você quer dizer Pacotes de BPL, por isso aqui estão as diretrizes:

Cada BPL, quando ele é carregado, carrega todas as unidades na mesma. Nenhuma unidade pode ser carregado mais de uma vez. Isso significa que, se mais de um pacote precisa de acesso a um dos globals, então ele tem que ser tanto em um pacote que o outro (s) têm em sua Requer lista ou em um pacote separado que todos os outros exigem.

Como para carga vs. dinâmica estática, se seu programa absolutamente precisa, torná-lo estaticamente ligado. carregamento dinâmico é para as características opcionais, tais como plug-ins. (Se você quiser ir por esse caminho, dê uma olhada JVPlugin na JVCL. É um sistema muito útil.)

Eu não entendo por que pessoas mencionar a versão Delphi para uma pergunta simples como este, a resposta é sim, é melhor colocar variáveis ??compartilhadas em uma unidade separada antes da palavra-chave de implementação. Cada objeto (forma, classe, controle) é derivada de TObject, mesmo se você definir uma classe como

type TMyClass = class
  // no inheritance ?
end;

a classe acima ainda é derivada de TObject (leia Delphi ajuda). Suas variáveis ??globais podem ser declarados do tipo TObject ou ponteiro e quando você acessá-los usar TForm elenco rígido (MyPointerVariable) .Method, i.

var MyPointerVariable: Pointer; // I presume it is already initialized and is a pointer to a TForm descendant
...
begin
     TForm(MyPointerVariable).Caption := 'Stack Overflow';
end;

Para mais informações leia Delphi tutorial no meu blog deve ser muito simples de entender.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top