AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Quelltext richtig sortieren, aber wie am besten?
Thema durchsuchen
Ansicht
Themen-Optionen

Quelltext richtig sortieren, aber wie am besten?

Ein Thema von ChristianG · begonnen am 6. Aug 2014 · letzter Beitrag vom 6. Aug 2014
Antwort Antwort
ChristianG

Registriert seit: 8. Jul 2014
97 Beiträge
 
Delphi XE6 Starter
 
#1

Quelltext richtig sortieren, aber wie am besten?

  Alt 6. Aug 2014, 09:37
Guten morgen liebe Delphi Gemeinde,
ich arbeite schon seit mehreren Wochen an einer App für Android, die langsam sehr unübersichtlich wird. Mit knapp 2000 Zeilen ist diese auch nicht winzig und wenn weitere Features dazukommen kann ich mich kaum noch orientieren, was was ist.
Meine Idee: Ich erstelle neben der Hauptunit 3 weitere Units die folgendes machen.
1.SessionData: Ist als Speicherquelle für variablen gedacht.
2.TsData: Ist zur Kommunikation des Servers gedacht.
3.Worker: Ist zum berechnen der Daten gemacht.
Meine erste Frage ist, ob es Sinn macht es so zu unterteilen.
Die zweite Frage ist, wie ich variablen von TSData in eine Funktion im Worker ausgeben kann, um mit denen weiterzurechnen.
Quelltext: worker:
Delphi-Quellcode:
function TWorker.Login(const Benutzername, Password: string; var SessionID,
  Output: string): integer;
  var
  locNode : IXMLNode;
  bnode : IXMLNode;
  u : Integer;
  XMLbezahlen: IXMLDocument;
  cdsbezahlen: TClientDataSet;
begin
 TSessionData.Logindaten(); //const sollen con TsessionData geladen werden
 TsData.Login; //Kommunikation mit dem Server, aber wie

 for u := 0 to XMLbezahlen.DocumentElement.ChildNodes.Count - 1 do begin

    bnode := XMLbezahlen.DocumentElement.ChildNodes.Get(u);


    With cdsbezahlen.create(self) do begin
    cdsBezahlen.Append;

    cdsBezahlen.FieldByName('Position').asInteger := u;

    locNode := bnode.ChildNodes.FindNode('ID');
    cdsBezahlen.FieldByName('ID').AsString := IfThen(locNode = nil, '', locNode.Text) ;

    locNode := bnode.ChildNodes.FindNode('Name');
    cdsBezahlen.FieldByName('Name').AsString := IfThen(locNode = nil, '', locNode.Text);

    locNode := bnode.ChildNodes.FindNode('Price');
    cdsBezahlen.FieldByName('Kosten').AsString := IfThen(locNode = nil, '', locNode.Text);

    locNode := bnode.ChildNodes.FindNode('SeatingCategory');
    cdsBezahlen.FieldByName('Sitzrheie').AsString := IfThen(locNode = nil, '', locNode.Text);

    cdsBezahlen.Post;
SessionData:
Delphi-Quellcode:
function TSessionData.Logindaten(var Name, Password): String;
begin
Password := Appversuch6.Appseite1.edPasswort.text;
name := Appversuch6.Appseite1.edBenutzername.text;
end;
TsData:
Delphi-Quellcode:
function TTSData.Login(const Benutzername,Password: string; var SessionID: string): integer;
var
  postdata : TStringlist;
  Url : String;
  Node : IXMLNode;
  XMLlogin : TXMLDocument;
begin
  XMLLogin := TXMLDocument.Create(self);


  postdata := TStringList.Create;
  URL := 'Name der Internetseite';

  postdata.Add('loginname=' + Benutzername);
  postdata.Add('password=' + Password) ;
  with TIDHTTP.Create(Self) do
  try

    Output := Post(URL,postdata);

    except
      on e:exception do begin
      result := StrToInt(e.message);
      exit;
    end;
  end;

  postdata.free;
  XMLlogin.XML.Text := Output;
  XMLlogin.Active := true;

  with TIdhttp do begin
    ConnectTimeout := 3000;
    Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.2; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';
  end;

  node := XMLlogin.DocumentElement.ChildNodes.FindNode('SessionID');
  SessionID := node.Text;

end;
Ich brauche Hilfe beim Worker. Danke schon einmal im voraus
Christian
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Quelltext richtig sortieren, aber wie am besten?

  Alt 6. Aug 2014, 10:04
Zitat:
Meine erste Frage ist, ob es Sinn macht es so zu unterteilen.
Ja, pro Aufgabe/Klasse eine eigene Unit.
Ausnahmen bestätigen die Regel -> Insofern sich die Klassen nicht gegenseitig kennen müssen usw. usf.

Zitat:
Die zweite Frage ist, wie ich variablen von TSData in eine Funktion im Worker ausgeben kann, um mit denen weiterzurechnen.
Dir Frage ist schwammig.
Was genau ist dein Problem?

Auf so etwas bist ja hoffentlich schon selber gekommen:
Delphi-Quellcode:
  
TWorker = class
  private
    FTSData : TTSData;
    .
    .
    .
  public
    property TSData : TTSData
      read GetTSData
      write SetTSData;
  end;
  Mit Zitat antworten Zitat
ChristianG

Registriert seit: 8. Jul 2014
97 Beiträge
 
Delphi XE6 Starter
 
#3

AW: Quelltext richtig sortieren, aber wie am besten?

  Alt 6. Aug 2014, 10:20
Delphi-Quellcode:
unit Worker;


interface


  uses
   TSData,SessionData,System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Actions,
  FMX.ActnList, FMX.TabControl, FMX.StdCtrls, FMX.Layouts, FMX.Memo, Xml.xmldom,
  Xml.XMLIntf, Xml.XMLDoc, IdBaseComponent, IdComponent, StrUtils,
  IdTCPConnection, IdTCPClient, IdHTTP, FMX.Objects, FMX.Ani, System.Rtti,
  FMX.Grid, Data.DB, Datasnap.DBClient, FMX.Edit, Unit1,Unit2, FMX.ListBox,FMX.Styles;


type
 TWorker = class (TObject)
  private
    FTSData : TTSData;
  public
    constructor Create;
    destructor Destroy;override;

    function Login(const Benutzername, Password : string; var SessionID,Output : string) : integer;
  end;
implementation

{ TWorker }

constructor TWorker.Create;
begin
  FTSData := TTSData.Create;
end;

destructor TWorker.Destroy;
begin
  FreeandNIL(FTSData);
  inherited;
end;
Ich versuche die Frage näher zu erläutern:
Mein Worker soll alle rechenoperationen durchführen. Sprich die funktion TsData.login und SessionData müssen in der Funktion aufgerufen werden. Die werte aus SessionData(Benutzername, Password) sollen als constante in Worker.Login geschrieben werden. Ich weiß nur nicht genau wie ich ich es am besten machen soll.

Diese verschiedenen Units sollen für mich als Orientierungshilfe und für bugfixes nnützlich sein. Bei 2000 Zeilen verliert man einfach zu schnell den überblick. Darum will ich, dass in meiner Haupunit höchstens 5 Zeilen pro befehl stehen

Appversuch6.BTNAnmelden.click
begin
Worker.login;
Tabconrol1.ActiveTab := TabIdem5;// Provisorisches Beispiel und 100 Prozent nicht richtig. Nur zur Veranschaulichung
end;

Also so etwas wäre der Idealfall
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Puke
Puke

Registriert seit: 7. Nov 2012
123 Beiträge
 
Delphi XE5 Architect
 
#4

AW: Quelltext richtig sortieren, aber wie am besten?

  Alt 6. Aug 2014, 10:42
Moinse,
ich hoffe ich habe die Frage einigermaßen verstanden.

1.
Sowas gibt immer Sinn. Dabei spielt die Zeilen-Anzahl keine Rolle. (Mich würde schon die Anzahl deiner eingebundenen Units, dazu verleiten paar Dinge einfach auszulagern)

2.
Zuerst einmal bietet sich als Ersatz für die "Konstante" ein Feld der Klasse an. Man muss es danach ja nicht zwangsläufig verändern. Meines Wissens nach, gibt es keine Möglichkeit eine wirkliche Konstante zur Laufzeit zu verändern.
Jetzt weiß ich allerdings nicht, was TSessionData ist. Aber vermutlich gibt es Daten per out -Parameter zurück. Also Felder einsetzen ... FERTIG

Gruß
Puke

Edit: Wer macht eigentlich dieses TsData.Login? Die Instanz der Klasse (FTSData) oder die Klasse selbst (TTSData)?
Gruß Puke

Geändert von Puke ( 6. Aug 2014 um 10:46 Uhr)
  Mit Zitat antworten Zitat
ChristianG

Registriert seit: 8. Jul 2014
97 Beiträge
 
Delphi XE6 Starter
 
#5

AW: Quelltext richtig sortieren, aber wie am besten?

  Alt 6. Aug 2014, 10:55
SessionData ist ein Speicher für alle Variablen. Da es schon mehr als 100 sind finde ich es sinnvoll, eine eigene Unit zu machen. Möglicherweise soll ich statt const eine Variable verwenden. Und dann gibt es noch die Frage ob ich bei SessionData eher eine Property oder eine Funktion benutzen soll.
Ich kann wirklich nicht gut erklären, darum versuche ich es mit einem Beispiel:
funktion worker.login(var Benutzernname, passwort): integer// Integer wegen dem Fehlercode, falls etwas nicht klappt
var
// Hilfsvariablen
begin
Sessiondata.login// Aus einem Edit werden Benutzername und passwort herausgelesen. Benutzername und Passwort ändern sich im worker.
TSData.login// Kommunikation mit einem Server
berechnung// Mit Daten aus dem Server/ FMX Datei
end;

Hauptunit.BtnLogin.click
begin
worker.login
end;

Das ist ein Praktisches Beispiel
Christian
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Quelltext richtig sortieren, aber wie am besten?

  Alt 6. Aug 2014, 10:59
[OT]Was spricht gegen die Verwendung von Codetags hier im Forum, das macht Deien Beiträge für andere leichter lesbar.

Bitte bearbeite Deine Beiträge und füge diese ein.[/OT]
Markus Kinzler
  Mit Zitat antworten Zitat
ChristianG

Registriert seit: 8. Jul 2014
97 Beiträge
 
Delphi XE6 Starter
 
#7

AW: Quelltext richtig sortieren, aber wie am besten?

  Alt 6. Aug 2014, 11:10
Mache ich jetzt. Würde mich freuen wenn jemand einen Beispielquelltext schicken kann, welcher zeigt, wie ich die Funktion richtig zum laufen bringe. Dies ist mein erstes Größeres Projekt und deswegen habe ich keine wirkliche Ahnung wie man das so hinbekommt
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Puke
Puke

Registriert seit: 7. Nov 2012
123 Beiträge
 
Delphi XE5 Architect
 
#8

AW: Quelltext richtig sortieren, aber wie am besten?

  Alt 6. Aug 2014, 11:17
Niemals, Daten eines Objektes irgendwohin auslagern. Die Variablen gehören dem Objekt (wichtiger Bestandteil der OOP). Also diese bitte als Felder anlegen.

Du musst nur zwei Felder bei TWorker anlegen:
Delphi-Quellcode:
TWorker = class(TObject)
private
  FBenutzername: string;
  FPasswort: string;
{...}
Nun nurnoch die function bei TWorker.Login aufrufen:
Delphi-Quellcode:
function TWorker.login(IN_Benutzernname, IN_Passwort: string): integer// Integer wegen dem Fehlercode, falls etwas nicht klappt
begin
  FBenutzername := IN_Benutzername;
  FPasswort := IN_Passowrt;
  TSData.Login(FBenutzername, FPasswort);
  {...}
end;
Gruß
Puke
Gruß Puke

Geändert von Puke ( 6. Aug 2014 um 12:36 Uhr) Grund: Weil ich was ändern wollte?
  Mit Zitat antworten Zitat
ChristianG

Registriert seit: 8. Jul 2014
97 Beiträge
 
Delphi XE6 Starter
 
#9

AW: Quelltext richtig sortieren, aber wie am besten?

  Alt 6. Aug 2014, 11:21
Vielen Dank für deine Tipps. Probiere es gleich mal aus
Christian
  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 23:01 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