AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Probleme bei Projektaufteilung in Packages
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme bei Projektaufteilung in Packages

Ein Thema von OlliWW · begonnen am 25. Sep 2016 · letzter Beitrag vom 26. Sep 2016
Antwort Antwort
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#1

Probleme bei Projektaufteilung in Packages

  Alt 25. Sep 2016, 13:58
Delphi-Version: 10 Seattle
Hallo Zusammen,

Da mein Projekt nun schon sehr groß geworden ist, versuche ich gerade das Projekte in kleinere Packages aufzuteilen.

Mein größtes Problem dabei ist, dass viele Units logischerweise viele Abhängigkeien zu anderen Units haben und dies unheimlich schwer zu trennen ist.

Nun suche ich nach Wegen dies zu tun.

Viele Abhängigkeiten zu anderen Units könnte ich auflösen, wenn ich es schaffen würde bestimmte Aufrufe umzuprogrammieren.

Beispiel:
In meinem Package habe ich ein paar Stellen die eine Messagebox aufrufen. Dies ist eine spezielle Messagebox mit eigenen Anpassungen etc. Dies ist nur ein Methodenaufruf, der aber wiederrum Units aus dem Hauptprojekt nutzt.
Gibt es eine Möglichkeit diesen Methodenaufruf zu implementieren, ohne dabei zur Kompilierzeit des Packages die Funktion zu kennen? Ich bin mir nicht sicher, aber vielleicht könnte RRTI mir hier helfen?!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Probleme bei Projektaufteilung in Packages

  Alt 25. Sep 2016, 15:48
In diesem Fall können Prozedurvariablen eine Hilfe sein. Etwas Ähnliches findest du in dieser Antwort auf StackOverflow: How to access delphi function at DPR scope

Im Wesentlichen deklariert man einen Prozedur- oder Methodentyp (in neueren Versionen auch den Typ einer Anonymen Methode), legt eine entsprechende Variable, ein Property oder einen Aufrufparameter an, der dann im Hauptprojekt mit der tatsächlichen Implementierung besetzt wird.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#3

AW: Probleme bei Projektaufteilung in Packages

  Alt 26. Sep 2016, 12:10
Hallo,

Danke für die Antwort, ich hätte vielleicht noch dabei schreiben sollen, dass ich es schon mit Properties die proceduren sind versucht habe. Dies klappt auch wunderbar. Das Problem ist, dass mein "generelles" Package in vielen Units im Hauptprojekt genutzt wird (> 1000 Units) und ich deshalb bei jedem Objekt dieses Property zuweisen muss, was eine Menge Arbeit ist
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Probleme bei Projektaufteilung in Packages

  Alt 26. Sep 2016, 13:02
Dann verwende eine globale Variable. Das ist zwar eigentlich verpönt, aber deutlich weniger Arbeit. Wenn jetzt sowieso immer dieselbe Prozedur aufgerufen wird, ist die globale Variable faktisch auch nichts anderes.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Probleme bei Projektaufteilung in Packages

  Alt 26. Sep 2016, 13:51
Gibt es eine Möglichkeit diesen Methodenaufruf zu implementieren, ohne dabei zur Kompilierzeit des Packages die Funktion zu kennen? Ich bin mir nicht sicher, aber vielleicht könnte RRTI mir hier helfen?!
Ja... Einfache Antwort : Interfaces

Also ganz einfach:

Immer gegen Interfaces programmieren und "NIE" gegen Implementationen...

Dann einfach eine Factory die aus einem Interface das Object erzeugen kann und fertig...

So müssen alle Units nur gegen die Interface-Declarations-Unit und gegen die Factory linken...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Probleme bei Projektaufteilung in Packages

  Alt 26. Sep 2016, 14:00
Ein bestehendes, großes Projekt würde ich auch (wie ich Uwes Beitrag entnehmen würde) erst mal nur dezent umstellen.

Gibt es irgendwelche realen Probleme oder stehen gravierende Erweiterungen an, die Du mit der aktuellen Struktur nicht mehr realisieren kannst?

Die Trennung in unabhängige Bestandteilen ist sicherlich ein gutes Ziel, aber es kann sein, dass Du, nachdem Du einmal angefangen hast, aus dem Kreislauf gar nicht mehr raus kommst.

Also vielleicht wäre es auch besser, das alte Projekt so zu belassen und bei neuen Projekten auf eine klarere Struktur zu achten.

Wir haben uns z.B. entschieden, ein sehr altes Projekt lieber gleich neu aufzubauen, als an dem alten noch etwas zu verschlimmbessern.

Man muss halt Aufwand und Nutzen abwägen und die Konsequenzen bedenken.


Das würde ich auch auf Mavariks Beitrag beziehen.
Interfaces sind nützliche Konstrukte. Aber ein bestehendes großes Projekt auf Interfaces umzustellen ist u.U. schon eine gewaltige Aufgabe - zumal wenn man nichts über das derzeitige Projekt weiß.
Für neue Projekte könnte man allerdings über den Einsatz von Interfaces nachdenken.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#7

AW: Probleme bei Projektaufteilung in Packages

  Alt 26. Sep 2016, 14:06
Hallo,
Ein bestehendes, großes Projekt würde ich auch (wie ich Uwes Beitrag entnehmen würde) erst mal nur dezent umstellen.

Gibt es irgendwelche realen Probleme oder stehen gravierende Erweiterungen an, die Du mit der aktuellen Struktur nicht mehr realisieren kannst?

Die Trennung in unabhängige Bestandteilen ist sicherlich ein gutes Ziel, aber es kann sein, dass Du, nachdem Du einmal angefangen hast, aus dem Kreislauf gar nicht mehr raus kommst.

Also vielleicht wäre es auch besser, das alte Projekt so zu belassen und bei neuen Projekten auf eine klarere Struktur zu achten.

Wir haben uns z.B. entschieden, ein sehr altes Projekt lieber gleich neu aufzubauen, als an dem alten noch etwas zu verschlimmbessern.

Man muss halt Aufwand und Nutzen abwägen und die Konsequenzen bedenken.
Wir entwickeln nur ein Projekt, deswegen muss, wenn Änderungen vorgenommen werden, es an diesem Projekt sein. Bei 2 Mio Zeilen ist etwas zu Refaktor'n immer eine Mamutaufgabe.
Das Problem momentan ist, dass der Kompilier-Vorgang sehr lange dauert und die Intellisense der IDE gar nicht nutzbar ist. Wenn ich "." STRG + Leertaste drücke dauert es sehr lange bis die IDE sich überhaupt wieder fängt. Dass sie mir dann Vorschläge macht, habe ich schon lange aufgegeben

Mit der Brechstange habe ich mal zum Testen die Abhängigkeiten zwischen den beiden Packages aufgelöst und siehe da: Die IDE funktioniert wieder. Von daher würde ich gern diesen Weg gehen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Probleme bei Projektaufteilung in Packages

  Alt 26. Sep 2016, 15:11
Und noch bissl Hilfe, beim Suchen für's Auflösen.

Bei Google suchenDelphi Unit Abhängigkeiten
Bei Google suchenDelphi Unit Dependencies / Bei Google suchenDelphi Unit Dependency

http://www.delphipraxis.net/180345-u...rstellung.html
http://www.easy-ip.net/delphi-unit-d...y-scanner.html


Der Vorteil bei Packages/DLLs ist, dass nicht ständig immer wieder alles kompiliert werden muß. (auch wenn nicht immer jede Unit neu kompiliert, sondern ein vorhandenes Kompilat nur noch reingelinkt wird, auch man sagt "Build" statt "Compile")
$2B or not $2B

Geändert von himitsu (26. Sep 2016 um 15:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

AW: Probleme bei Projektaufteilung in Packages

  Alt 26. Sep 2016, 15:18
Immer gegen Interfaces programmieren und "NIE" gegen Implementationen...

Dann einfach eine Factory die aus einem Interface das Object erzeugen kann und fertig...

So müssen alle Units nur gegen die Interface-Declarations-Unit und gegen die Factory linken...
Das ist im Wesentlich auch nichts anderes als mein Vorschlag eines Prozedurtyps (Interface), Globale Prozedurvariable (Factory) und der implementierenden Prozedur (Objekt-Instanz). Nur daß in meinem Fall die Änderungen am Sourcecode nur minimal sind und trotzdem den gewünschten Effekt erzielen.

In meinem Vortrag "Altlast oder Erbschaft" auf den Delph-Tagen 2015 hatte ich diese Ansatz kurz angesprochen.
Miniaturansicht angehängter Grafiken
26-09-_2016_15-15-52.jpg  
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Probleme bei Projektaufteilung in Packages

  Alt 26. Sep 2016, 18:11
Wir haben uns z.B. entschieden, ein sehr altes Projekt lieber gleich neu aufzubauen, als an dem alten noch etwas zu verschlimmbessern.
Diese Diskussion kommt bei uns 1x im Quartal auf... Neu schreiben und direkt alles richtig machen oder refrakturieren.

Bei 12 Mio. Zeilen überlegt man sich ein "mal eben" neu schreiben... (In unserem Fall seit 10 Jahren).

Also immer ein Häppchen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 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