Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Mehrere Packages mit selben Units (https://www.delphipraxis.net/77838-mehrere-packages-mit-selben-units.html)

sminds 25. Sep 2006 16:41


Mehrere Packages mit selben Units
 
Um die Applikation schlanker zu machen, habe ich die Forms nach Abteilungen in einzelne Packages
ausgelagert (z.B. Buchhaltung.bpl, edv.bpl,.. usw.) Die Packages bestehen aus einigen Formularen und
aus einigen Units, die öfters verwendet werden (z.B. eine Unit translate, eine Unit dbtransaktionen), die
mir die Formulare übersetzt oder den Datenbankzugriff steuert.

Nun habe ich allerdings das Problem, daß ich nie 2 Packages gleichzeitig zur Laufzeit laden kann, da ich sonst die
Fehlermeldung erhalte: Cannot load package 'Buchhaltung.' It contains unit 'translateunit, 'which is also contained in package 'EDV'.

Nutzt ihr dafür noch zusätzlich DLLs oder ein allgemeines Package? Ich weiß zwar noch nicht genau wie ich das Umsetzen kann, jedoch sollte es gehen, finde ich es nicht unbedingt übersichtlich, wenn im Package nochmals ein Package geladen wird...

Die Packages selber habe ich so erstellt: link

lg,
sminds.

Elvis 25. Sep 2006 19:50

Re: Mehrere Packages mit selben Units
 
Du musst sicherstellen, dass eine Unit nur einmal in ein Package kompiliert wird.
Packages, die diese Unit benutzen müsen das Package in das sie kompiliert wurde in die "requires" clause aufnehmen.
Dadurch werden sie zwar von einem anderen package abhängig, aber du gewinnst auch mehr Klarheit über die Beziehungen zwischen den Modulen.
Wichtig zu wissen ist, dass ein Package, dass von einem anderen Package abhängig ist, dieses mitlädt wenn es selbst geladen wird.
Wenn man das für initialization/finalization beachtet, hat man ein sehr mächtiges System um einzelne Module während des Betriebes ein- und auszuklinken bzw. zu aktualisieren ohne die App beenden zu müssen.
Ein sehr krasses Beispiel, das zeigt was damit möglich ist, ist Hydra von RemObjects. ;-)

sminds 26. Sep 2006 07:52

Re: Mehrere Packages mit selben Units
 
Zitat:

Zitat von Elvis
Du musst sicherstellen, dass eine Unit nur einmal in ein Package kompiliert wird.
Packages, die diese Unit benutzen müsen das Package in das sie kompiliert wurde in die "requires" clause aufnehmen.
Dadurch werden sie zwar von einem anderen package abhängig, aber du gewinnst auch mehr Klarheit über die Beziehungen zwischen den Modulen.
Wichtig zu wissen ist, dass ein Package, dass von einem anderen Package abhängig ist, dieses mitlädt wenn es selbst geladen wird.
Wenn man das für initialization/finalization beachtet, hat man ein sehr mächtiges System um einzelne Module während des Betriebes ein- und auszuklinken bzw. zu aktualisieren ohne die App beenden zu müssen.
Ein sehr krasses Beispiel, das zeigt was damit möglich ist, ist Hydra von RemObjects. ;-)

:gruebel: Kannst Du mir das bitte anhand eines Beispiels erklären?

z.B.

Package EDV, existiert Unit translate
Package BUCHHALTUNG, existiert Unit translate

Lösung?

Package ALLGEMEIN, Unit translate?
Package EDV, Verweis auf Package ALLGEMEIN
Package BUCHHALTUNG, Verweis auf Package ALLGEMEIN

MfG,
~sminds.

Elvis 26. Sep 2006 08:40

Re: Mehrere Packages mit selben Units
 
Zitat:

Zitat von sminds
:gruebel: Kannst Du mir das bitte anhand eines Beispiels erklären?
z.B.
Package EDV, existiert Unit translate
Package BUCHHALTUNG, existiert Unit translate
Lösung?
Package ALLGEMEIN, Unit translate?
Package EDV, Verweis auf Package ALLGEMEIN
Package BUCHHALTUNG, Verweis auf Package ALLGEMEIN

Gutes Beispiel. :mrgreen:

sminds 26. Sep 2006 08:43

Re: Mehrere Packages mit selben Units
 
Zitat:

Zitat von Elvis
Gutes Beispiel. :mrgreen:

Das war aber mein Beispiel :wink:

Kannst Du mir ein paar Zeilen Code liefern, wie ich das Package im Package nochmals aufrufe und es die anderen offenen Package nicht "stört".

Danke,
~sminds.

Elvis 26. Sep 2006 08:45

Re: Mehrere Packages mit selben Units
 
Zitat:

Zitat von sminds
Das war aber mein Beispiel :wink:
Kannst Du mir ein paar Zeilen Code liefern, wie ich das Package im Package nochmals aufrufe und es die anderen offenen Package nicht "stört".

Aber was soll dir hier Code bringen? Das ist ein rein abstraktes Problem, hat rein gar nix direkt mit dem Code in den Units zu tun, nur wie du diese aufteilst. Dein Beispiel zeitg, dass du verstanden hast was ich dir sagen wollte. Wozu jetzt noch Code? :gruebel:

negaH 26. Sep 2006 08:51

Re: Mehrere Packages mit selben Units
 
Packages ALLGEMEIN -> Unit Transate
Library EDV -> Formular EDV
Library Buchhalrung -> Formular Buchhaltung

Statt alles in Packages zu bauen, wird der komplette "Frame" der Anwendng bestehend aus allen Units die in den späteren Formular-Plugins benutzt werden sollen, in Packages integriert.

Die eigentlichen Formulare/Druckmodule etc. pp. werden als DLL erzeugt die aber Packages benutzen, nämlich deine Frame-Packages und die der VCL.

Die Abstraktion ist nun nochmals stärker denn

Packages -> gemeinsam benutzt
Library -> nicht gemeinsam benutzt

Die Library als DLL in der nun dene Formulare als PlugIn drinnen sind stellen in diesem Konzept quasi Endpunkte dar. Diese Endpunkte werden und können nicht durch andere Endpunkt verwendet werden.

Im Gegenastz zu einem Package exportiert so eine DLL nämlich nicht ALLE darin deklarierten Funktionen/Klassen/Datentypen als Exports. Eine solche DLL wird also enorm kompakt sein, im Gegensatz zu einem Package.

Gruß Hagen

sminds 3. Okt 2006 14:29

Re: Mehrere Packages mit selben Units
 
Zitat:

Zitat von Elvis
Zitat:

Zitat von sminds
Das war aber mein Beispiel :wink:
Kannst Du mir ein paar Zeilen Code liefern, wie ich das Package im Package nochmals aufrufe und es die anderen offenen Package nicht "stört".

Aber was soll dir hier Code bringen? Das ist ein rein abstraktes Problem, hat rein gar nix direkt mit dem Code in den Units zu tun, nur wie du diese aufteilst. Dein Beispiel zeitg, dass du verstanden hast was ich dir sagen wollte. Wozu jetzt noch Code? :gruebel:

Habe es heute umgesetzt. Habe einfach ein Package mit dem Namen z.B. Admin erstellt. Dort alle Units hinzugefügt, die mehrmals verwendet werden. In allen anderen Packages habe ich in den Package-Eigenschaften unter Requires das Amin-Package hinzugefügt. Somit wird von allen Packages aus das Admin-Pack verwendet.

Gruß,
sminds.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz