Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Projektplanung und -Management (https://www.delphipraxis.net/85-projektplanung-und-management/)
-   -   Planungstool - Struktur ok ? (https://www.delphipraxis.net/158906-planungstool-struktur-ok.html)

jokerfacehro 7. Mär 2011 15:39


Planungstool - Struktur ok ?
 
Hallo,

ich bin Dualstudent und habe einen Projektauftrag bekommen, den ich allein umsetzen soll.
Bei dem ganzen geht es um Netzwerkplanung.

Die funktionale Struktur ist folgendermaßen:

Man erstellt ein Projekt. Von da aus geht eine Baumstruktur weiter.

Projekt->Länder->Städte->Standorte->Cluster

in den Clustern kann man sich dann seine Komponenten fürs Netzwerk zusammenclickern etc.
und innerhalb der Cluster wirds dann kompliziert, da viele Informationen aus ner DB da mit reinspielen, doch soweit bin ich noch garnicht.


Mein Problem ist folgendes.
Ich möchte die Projektstruktur als DB speichern (bevorzugt MSAccess).
Das ganze soll dann per TreeView angezeigt werden und für jede Hierachiestufe, soll es ein Formblatt geben, wo man Daten dafür ausfüllen kann.

Ich habe mir dazu ein Konstrukt überlegt und wollte mal feedback haben, ob das eine gute lösung ist.


Die Hauptklasse stellt das ControlInterface (CI) dar und steuert alles.
Im CI ist erstmal das DatenbankInterface(DBI) und die Benutzeroberfläche(GUI).

Die GUI besteht aus einem TreeView für die Strukturansicht und einem Panel, auf dem ich ein PageControl einrichte, dass die Formulare für die Hierachieebenen anzeigt.

Dazu möchte ich die Daten immer direkt aus der DB laden und beim ändern auch direkt wieder speichern. Die Baumstruktur kann bis zu 1000 Einträge viell. auch mehr haben. Ist es vielleicht besser über eine Hilfsstruktur, wie ein Record zu gehen?


Grüße

Sir Rufo 7. Mär 2011 15:55

AW: Planungstool - Struktur ok ?
 
Muss man nicht unbedingt ...

Für die Tabellen-Struktur baust du dir einfach eine Tabelle, die die Abhängigkeiten zum Vorgänger (ParentID), den Typen (IDType) und die ID des Eintrags (ItemID) speichert.

Nun erstellst du dir ein Basis-Formular, dem du eine ItemID übergeben kannst.
Delphi-Quellcode:
TFBaseItem = class( TForm )
public
  property ID : integer;
end;

// Das brauchen wir später noch :)
TFBaseItemClass = class of TFBaseItem;
Für alle vorkommenden Typen erstellst du dir ein entsprechendes Formular, abgeleitet vom Basis-Formular,
mit dem alle Funktionen zu diesem Item möglich sind. (Daten zur ID aus der DB anzeigen, bearbeiten)
Diese Formulare werden dann mit
Delphi-Quellcode:
RegisterClassAlias
deiner Anwendung bekannt gegeben.
Delphi-Quellcode:
TFLand = class( TFBaseItem);

initialization

RegisterClassAlias( TFLand, '1' ); // Land hat z.B. IDType = 1
// oder auch
RegisterClassAlias( TFLand, 'Land' );
Möchtest du nun das passende Formular zu einem Item anzeigen, dann geht das wie folgt:
Delphi-Quellcode:
procedure ShowItemForm( IDType, ItemID : integer );
begin
  with TFBaseItem( FindClass( IntToStr( IDType ) ) ).Create( Application ) do
  begin
    ID := ItemID;
    Show;
  end;
end;

jokerfacehro 7. Mär 2011 17:09

AW: Planungstool - Struktur ok ?
 
Danke für die schnelle Antwort.
Dass mit der Struktur des Baums in einer Tabelle speichern, war auch genauso meine idee.
dazu habe ich dann pro hierachieebene eine tabelle, wo ich die attribute speicher.

da bin ich froh, schon nen guten lösungsansatz gefunden zu haben :)

die idee mit der formularerstellung ist mir ganz neu und da werd ich mich jetzt mal informieren.

Delphi-Quellcode:
// Das brauchen wir später noch :)
TFBaseItemClass = class of TFBaseItem;
nutze ich um den benötigten klassen-typ zu übergeben, richtig?
z.B.

Delphi-Quellcode:

type TFLand = class(TFBaseItem)
end;

type TFBaseItemClass = class of TFBaseItem;



procedure CreateForm(FormType: TFBaseItemClass);
begin

FormType.Create(Application);

end;

procedure Click;
begin

RegisterClass(TFLand,'Land');

CreateForm(FindClass('Land'));
end;

hoffe ich konnte dir folgen

Sir Rufo 7. Mär 2011 17:16

AW: Planungstool - Struktur ok ?
 
Nein, nicht ganz (ich hatte aber auch einen kleinen Fehler drin)

Erzeugt werden die Formulare so
Delphi-Quellcode:
uses
  frmBaseItem;

procedure ShowItemForm( IDType, ItemID : integer );
begin
  with TFBaseItemClass( FindClass( IntToStr( IDType ) ) ).Create( Application ) do
  begin
    ID := ItemID;
    Show;
  end;
end;
Mit FindClass kannst du nach einem Klassennamen (auch Alias, den wir benutzt haben) suchen lassen.
Der Rückgabewert von FindClass (logischerweise eine Class) wird per Cast auf die Basis TFBaseItemClass gebracht und erzeugt.

Der Vorteil ist nun, dass deine HauptAnwendung die Formulare gar nicht kennen muss, sondern nur das Basis-Formular.
Weiterhin kannst du auch erst prüfen, ob du eine Klasse zurückbekommen hast und dann erst erzeugen.
Wenn keine Klasse kommt, dann eben nichts machen ;)

So kannst du die benötigten Formulare auch erst zu einem späteren Zeitpunkt coden und brauchst dich aber nicht um die Abhängigkeiten scheren.

Du kannst auch zunächst ein Dummy-Formular erstellen.

BTW Als ClassAlias "1" zu nehmen ist natürlich doof, besser wäre es natürlich "ItemType1", "ItemType2", etc. ;)

jokerfacehro 7. Mär 2011 17:31

AW: Planungstool - Struktur ok ?
 
Danke dir.

Das ist perfekt für mein Projekt geeignet, da der Komplexitätsgrad sehr hoch ist :)

Ich habs noch nicht ganz verstanden, aber nachm Weiterlesen und Schlafen wirds bestimmt ;)


Ich melde mich später nochmal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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