AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vermischung von Darstellung und Logik

Ein Thema von DelphiManiac · begonnen am 3. Dez 2007 · letzter Beitrag vom 3. Dez 2007
Antwort Antwort
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Vermischung von Darstellung und Logik

  Alt 3. Dez 2007, 10:02
Hallo,

habe eine Frage zur Trennung von Design und Logik.

Ich besitzte eine Fachklasse "TPruefung" die für mich einen kompletten Prüfablauf abbildet.

Das heißt die Fachklasse startet meine Prüfungen (welche Mehtoden der Klasse sind) und kann sie unterbrechen usw..

Gut aber ich will die Durchführung meiner Prüfungen natürlich auch in meiner GUI darstellen.

Jetzt könnte ich (was ich ja gar nicht machen will) mein GUI Objekt direkt ansprechen indem ich diese Unit mit einbinde!


soetwa:


Delphi-Quellcode:
function TPruefung.Teste...:Boolean;
var
  I: Integer;
  Bits: Word;
  Flags: TBooleanArrayShort;
begin
    FObj.Set_OL_Config(0);
    FObj.Set_CT_Config(0);
    FObj.Set_Reset;
    frmMainGUI.imgOff.Show; // IMAGE anzeigen <----AAARGH
    Delay(1000);
    FOLCT.Set_TESTMODE(True);
    for I := 7 downto 0 do
    begin
      FOLCT.Set_CalibDaten(I);
      Delay(2000);
      FObj.Get_OLCTInput(Bits,Flags);
      case I of
        0: begin
...
Welche designerrischen Möglichkeiten gibt es ander der Stelle?

Gruß
DelphiManiac
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Vermischung von Darstellung und Logik

  Alt 3. Dez 2007, 10:05
Deine Klasse biete ja Funktionalität an.

Entweder du steuerst die Funktionen und die Darstellung 'von außen', also so z.B.:


Delphi-Quellcode:
MyClass.MyFunction;
Form1.ShowFunction;
, oder Du bietest Events an. Letzteres dann, wenn deine Klasse eine komplexe Funktion anbietet, in der Einiges passiert, Du aber jede einzelne Aktion visuell darstellen willst. Dann bietest du die Events 'OnFinishedAction1','OnFinishedAction2' usw. an.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#3

Re: Vermischung von Darstellung und Logik

  Alt 3. Dez 2007, 11:33
Das heißt,

ich sollte am besten ein Event (bzw gleich mehrere) anbieten, diese OOP-Methodezeiger rufen dann eine
Prozedur der GUI auf, richtig?

Also ungefähr so?

Delphi-Quellcode:
TfrmMainGUI.ShowImage1(Sender:TObject);
begin
 Self.img1.Show;
end;

TPruefung.Teste...;
begin
 Machhierwas...
 Machdawas ...
 OnShowImage1; // rufe Prozedurzeiger auf
 Machnochirgendwas...
end;
Danke
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Vermischung von Darstellung und Logik

  Alt 3. Dez 2007, 11:39
Zitat von DelphiManiac:
Das heißt,

ich sollte am besten ein Event (bzw gleich mehrere) anbieten, diese OOP-Methodezeiger rufen dann eine
Prozedur der GUI auf, richtig?

Also ungefähr so?

Delphi-Quellcode:
TfrmMainGUI.ShowImage1(Sender:TObject);
begin
 Self.img1.Show;
end;

TPruefung.Teste...;
begin
 Machhierwas...
 Machdawas ...
 OnShowImage1; // rufe Prozedurzeiger auf
 Machnochirgendwas...
end;
Danke
Net ganz

TPruefung sollte eine Eigenschaft haben, zB. OnShowImage1. Diese ist zB. vom Typ TNotifyEvent.
Also kommt zu private oder protected eine Variable FOnShowImage1 vom Typ TNotifyEvent und zu public oder published kommt eine property mit dem Namen OnShowImage1 die lese- und schreibzugriff auf FOnShowImage1 hat.

Wenn du das Ereignis auslösen willst musst du
If Assigned(FOnShowImage1) then FOnShowImage1(Self); schreiben.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Vermischung von Darstellung und Logik

  Alt 3. Dez 2007, 11:42
du kannst ja auch beim constructor einen owner übergeben und dann owner.imgOff.Show; aufrufen.
der owner ist dann vom typ TfrmMainGUI und beim create gibst du dann einfach self an;
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Vermischung von Darstellung und Logik

  Alt 3. Dez 2007, 11:45
Zitat von dominikkv:
du kannst ja auch beim constructor einen owner übergeben und dann owner.imgOff.Show; aufrufen.
der owner ist dann vom typ TfrmMainGUI und beim create gibst du dann einfach self an;
Was dann aber auch nicht wirklich anders ist, als seine ursprüngliche Methode.
Das Objekt kann man so auch nur mit dieser Form zusammen nutzen und nicht wirklich in andere Projekte etc. einbinden.

[edit] So mal der Owner ab TComponent eig. andere Aufgaben übernimmt als solche ... [/edit]
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Vermischung von Darstellung und Logik

  Alt 3. Dez 2007, 12:26
Ums sauber zu halten, sollte man niemals aus den Funktionalitätsklassen in irgendeiner Form auf die Gui zugreifen. Also weder direkt (frmMain.), noch über die Owner Eigenschaft (die ja gecastet werden muss, und du somit wieder direkten Zugriff auf die Form machst).

Warum?
Weil du so deine Funktionalitätsklasse nicht getrennt nutzen kanns. Sie funktioniert nur in Verbidnung mit deiner Gui. Bietest du z.B. später eine weiter Oberfläche an (z.B. als Webanwendung), bist du auf verlorenem Posten.

Die Lösung heisst Events: Die Gui ruft irgendeine Methode der Klasse auf, und reagiert vias Event wenn was Wichtiges neu gezeichnet werden muss.

Merke: Gut ist Zugriff von Gui->Klasse, nie umgekehrt... Ok, ich halte mich auich nicht immer daran weil das Ganze aufwendiger ist. Aber sauberer ist es auf alle Fälle.
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#8

Re: Vermischung von Darstellung und Logik

  Alt 3. Dez 2007, 12:31
Hi,

aufwendiger auf alle Fälle, aber man muss auch mal an Erweiterung / Fehlersuche denken,

die Zeit die man hier vorher investiert hat in ein sauberes Design holt man dort locker wieder raus.

Mmh nur irgendwie finde ich es blöd für jedes mal zeichnen ein Event zu programmieren,..
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Vermischung von Darstellung und Logik

  Alt 3. Dez 2007, 12:33
Zitat von Jelly:
Merke: Gut ist Zugriff von Gui->Klasse, nie umgekehrt... Ok, ich halte mich auich nicht immer daran weil das Ganze aufwendiger ist. Aber sauberer ist es auf alle Fälle.
Was man ja meistens daran fest macht, wie wahrscheinlich es ist die Klasse wo anders zu benötigen. Leider macht man dies ja meist falsch - wenn man sich die Mühe macht, guck niemals jemand wieder danach und wenn nicht, dann steht einige Wochen später der Kunde oder Chef vor der Tür und man wünschte sich es wäre eine schön gekapselte Klasse
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: Vermischung von Darstellung und Logik

  Alt 3. Dez 2007, 16:22
Schau dir mal DUnit an.
Das wurde ursprünglich für Unit-Tests entwickelt.
Die Klassenhierarchie und das ganze Konzept taugt aber auch für andere Software Tests.
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 17:24 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