AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Abgeleitete Klassen auf einzelne Units verteilen

Ein Thema von BastiFantasti · begonnen am 26. Jul 2022 · letzter Beitrag vom 28. Jul 2022
 
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Abgeleitete Klassen auf einzelne Units verteilen

  Alt 26. Jul 2022, 15:26
Durch diesen Ansatz will ich aber gerade das Aufsplitten der Klassen auf unterschiedliche Units erreichen.

Aktuell habe ich eine große pas Datei mit der Elternklasse sowie mehreren abgeleiteten Klassen.
Das macht das Debuggen oder das externe Vergleichen der unterschiedlichen Implementierungen mittels diff oder beyond compare sehr mühsam.
Ich hatte ja geschrieben, dass beim Verteilen der abgeleiteten Klassen in andere Units zirkuläre Referenzen entstehen. Das ist ja nicht per se verboten. Du kannst das ja erstmal machen und die jeweiligen Units in die implementation uses Anweisung von uParentDevice schreiben:
Delphi-Quellcode:
implementation

uses
  uDevType1, uDevType2, uDevType2;

constructor TParentDevice.Create;
begin
  inherited;
end;
Da die einzelnen Ableitungen an eine Enumeration gebunden sind, muss bei einer Erweiterung eh die uParentDevice angefasst werden. Die zirkulären Referenzen sind ja auch nur jeweils bidirektionaler Natur und das Ganze somit tolerierbar. Will man das Vermeiden muss man das Prinzip halt leicht abwandeln indem man z.B. deinen TDeviceHandler-Ansatz als Basis nimmt und das DeviceClass property dahin verlagert:
Delphi-Quellcode:
type
  TDeviceHandler = class
  private
    class function GetDeviceClass(dtDeviceType: TDeviceType): TParentDeviceClass; static;
  public
    class property DeviceClass[dtDeviceType: TDeviceType]: TParentDeviceClass read GetDeviceClass; default;
  end;

implementation

uses
  uDevType1, uDevType2, uDevType2;

class function TDeviceHandler.GetDeviceClass(dtDeviceType: TDeviceType): TParentDeviceClass;
begin
  case dtDeviceType of
    dtDeviceType1: Result := TDeviceType1;
    dtDeviceType2: Result := TDeviceType2;
    dtDeviceType3: Result := TDeviceType3;
  end;
end;
Der Aufruf ändert sich dann entsprechend:

Delphi-Quellcode:
var
  myDevice1: TParentDevice;
  myDevice2: TParentDevice;
begin
  myDevice1 := TDeviceHandler[dtDeviceType1].Create;
  ...
  myDevice2 := TDeviceHandler[dtDeviceType2].Create;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz