AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Architektur / Projektstruktur / zirkuläre Referenz Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Architektur / Projektstruktur / zirkuläre Referenz Problem

Ein Thema von _BlackDragon_ · begonnen am 28. Dez 2011 · letzter Beitrag vom 29. Dez 2011
Antwort Antwort
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#1

AW: Architektur / Projektstruktur / zirkuläre Referenz Problem

  Alt 28. Dez 2011, 15:32
Das wäre auch zu schön gewesen, einfach eine Unit in der alle Klassen vordeklariert sind, um diese dann einfach einbinden zu können.
Nimm aus meinem Beispiel die Unit uInterfaces und Du hast genau das.

Zu bemerken ist, dass die Klassen TEngine und TManager1 bei dieser Konstruktion praktisch nichts im Interface-Teil stehen haben und es nur eine Use-Klausel gibt, nach der man auch ohne Tools gar nicht lange suchen muss - SCNR.
Andreas
  Mit Zitat antworten Zitat
_BlackDragon_

Registriert seit: 4. Dez 2007
Ort: Eschweiler
64 Beiträge
 
#2

AW: Architektur / Projektstruktur / zirkuläre Referenz Problem

  Alt 28. Dez 2011, 16:17
Ok, das Prinzip via Interfaces hab ich im Ansatz verstanden und werde mein Wissen diesbezüglich noch erweitern.

Was mir allerdings nicht ganz klar ist, wieso ich in die Interface-Unit die "Objekt"-Units einbinden "muss". Ich habe sie mal zum Testen auskommentiert und die Klassendeklarationen (TEngine und TManager1) in den Interface-Teil der Units verschoben. So ist deren Sichtbarkeit gewährleistet. Oder blick ich grad nicht durch?

Habe die entsprechenden Stellen hier nur auskommentiert.

Delphi-Quellcode:
unit uInterfaces
interface

//uses
// Engine, Manager1;

type
  IManager1 = interface
    [Shift+Strg+G]
  end;

  IEngine = interface
    [Shift+Strg+G]
    function GetManager1 : IManager1;
    property Manager1: IManager1 read GetManager1;
  end;
Delphi-Quellcode:
unit Engine;
interface
//implementation
uses
  uInterfaces;

type
  TEngine = class(TInterfacedObject, IEngine)
  private
    FManager1: IManager1;
    function GetManager1 : IManager1;
  end;

implementation
...
Delphi-Quellcode:
unit Manager1;
interface
//implementation
uses
  uInterfaces;

type
  TManager1 = class(TInterfacedObject, IManager1)
  private
    FEngine: IEngine;
  protected
  public
    constructor Create(e: IEngine);
  end;

implementation
...
Sollte doch auch so funktionieren. Oder übersehe ich etwas?
  Mit Zitat antworten Zitat
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#3

AW: Architektur / Projektstruktur / zirkuläre Referenz Problem

  Alt 28. Dez 2011, 16:26
Was mir allerdings nicht ganz klar ist, wieso ich in die Interface-Unit die "Objekt"-Units einbinden "muss".
Sorry dafür, das ist bei diesem Beispiel natürlich nicht nötig. Es ist mir "reingerutscht", weil ich eigentlich die Interface-Deklarationen in den Units der Klassen belasse und in uInterfaces lediglich schreibe:

Delphi-Quellcode:
uses
  uEngine, uManager1;
type
  IEngine = uEngine.IEngine;
  IManager1 = uManager1.IEngine;
Diese Struktur ist bei vielen und/oder umfangreichen Interfaces viel übersichtlicher.

Und widerstehe bei diesem Konzept der Versuchung, die Deklaration der Klassen in den Interface-Teil zu ziehen. Du machst alles richtig, wenn sie isoliert in der Implementation-Sektion verbleiben. Für das Interface nach "draußen" gibt es ja ... das Interface.
Andreas

Geändert von neo4a (28. Dez 2011 um 16:31 Uhr)
  Mit Zitat antworten Zitat
_BlackDragon_

Registriert seit: 4. Dez 2007
Ort: Eschweiler
64 Beiträge
 
#4

AW: Architektur / Projektstruktur / zirkuläre Referenz Problem

  Alt 28. Dez 2011, 16:35
Sorry dafür,...
Ist nicht zu entschuldigen!

Ich hab wohl eher für den Stoß in die richtige Richtung zu danken. Nun heißt es lesen, lernen und loslegen.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Architektur / Projektstruktur / zirkuläre Referenz Problem

  Alt 28. Dez 2011, 16:47
Ich hatte das Problem/Thema auch schon einmal angesprochen: http://www.delphipraxis.net/1060983-post3.html

Bisher habe ich Interfaces immer vermieden und lieber "richtige Objekte" verwendet. Der Mehraufwand, extra Interfaces zu definieren, hat sich für mich nicht gerechnet.

Da ich inzwischen aber auch stärker auf Trennung von Projektteilen achte, scheint das Konzept von neo4a aber doich nicht uninteressant.
Mal sehen, vielleicht im nächsten Projekt...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#6

AW: Architektur / Projektstruktur / zirkuläre Referenz Problem

  Alt 28. Dez 2011, 17:07
das Konzept von neo4a
Es ist ja nicht so sehr meins, aber es ist ein Konzept, das in die Software-Entwicklung das einbringt, was in der Industrie längst praktiziert wird: standardisierte Schnittstellen.

Für Interfaces wird häufig der Vergleich zu Lampen in Häusern bemüht: Solange Du Deine Lampen nur einmalig installierst, kannst Du sie direkt ans Stromnetz anschließen (wird ja so bei den Deckenlampen gemacht). Portable Lampen haben einen Stecker und der Stecker passt in die Dose (der E-Dienst), der es egal ist, ob da eine Lampe, ein Toaster .... Solange der Stecker passt gibt's Strom, egal, was das Gerät damit macht.

Genauso kann man die Aufgabe von Interfaces auffassen: Sie verbergen den zu verbindenen Software-Teilen einander die jeweilge Funktionalität. Damit wird Dein Code "industrialisiert", d.h. modular, wartbar, testbar. Die Künstler unter uns werden nun weinen, aber das ist dann halt so.
Andreas
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: Architektur / Projektstruktur / zirkuläre Referenz Problem

  Alt 28. Dez 2011, 18:24
...nur hat die Industrie keine Probleme mit Speicherlecks.

Meine Grundregel: Entweder die Objekte NIE oder IMMER als Interface ansprechen. Dann gibts keine Probleme mit der Referenzzählung.
  Mit Zitat antworten Zitat
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#8

AW: Architektur / Projektstruktur / zirkuläre Referenz Problem

  Alt 28. Dez 2011, 16:52
Ich möchte Dir noch bei Deinen Untersuchungen einen Tipp resp. Warnung mitgeben: Die Arbeit mit Interfaces kann sich zu einem Albtraum entwickeln, weil je nach Implementierung die Freigabe der Objekte variiert und automatisch durch Delphi vorgenommen werden kann.

Hier hilft Dir ein Framework wie das schon erwähnte Delphi-Spring und kann Dir in der Folge sehr viel Frust abnehmen. Auf jeden Fall solltest Du in deiner dpr aktivieren:

Delphi-Quellcode:
begin
  ReportMemoryLeaksOnShutdown := DebugHook <> 0;
  Application.Initialize;
Andreas
  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 01:31 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