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