Thema: Prism Mein Programmierstyl

Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 10:32
Die Pascal-Fehler sind wohl langsam abgegrast, jetzt kommt .Net an die Reihe .
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Borland.Vcl.Menus, System.ComponentModel, Borland.Vcl.XPMan,
  Borland.Vcl.ComCtrls, Borland.Vcl.StdCtrls, System.Xml.Serialization,
  System.IO, Borland.Vcl.ExtCtrls, Borland.Vcl.StrUtils, IdBaseComponent,
  IdComponent, IdTCPServer;
Puh... Solange du nicht gerade eine große bestehende Anwendung auf .Net übertragen willst (was ich nicht glaube), solltest du die Finger von diesem VCL.Net-Zeugs nehmen. Die Dateigröße wirds dir danken, Mono ebenfalls, ich will gar nicht wissen, wie viele versteckte P/Invokes und andere Artefakte darin lauern und verspreche dir, dass du für jede einzelne Klasse der RTL/VCL ein Äquivalent in der FCL finden wirst, das zudem meistens auch noch objektorientierter ist.

Delphi-Quellcode:
type
  TDialogType = (dtOpen, dtSave);
Den T-Präfix darfst du ab nun reinen Gewissens wegsperren. Ein Enum-Präfix ist ungewöhnlich und in anderen .Net-Dialekten überflüssig, aber da diese mit Delphi.Net wohl weiterhin mit
dtOpen statt mit
DialogType.Open angesprochen werden können, kann man das wohl gelten lassen.

Delphi-Quellcode:
Tserver_mainform_form = class(TForm)
    MainMenu1: TMainMenu;
    geg1: TMenuItem;
    Beenden1: TMenuItem;
    Einstellungen1: TMenuItem;
    [...]
Erstmal durch ein Winform ersetzen, dann die entsprechenden Framework-Komponenten benutzen.

Delphi-Quellcode:
  TProfilDetails = class
  public
    Name: String;
  end;
Ein öffentliches Feld? Das ist sowhl in unmanaged als auch managed Code pöse .

Delphi-Quellcode:
var
  server_mainform_form: Tserver_mainform_form;
  Profil: TProfil;
  TcpServerPreferences: TTcpServerPreferences;
  Log: TLog;
  ServerBefehle: TServerBefehle;
Dito. entweder in die Mainform oder eine statische Klasse.

resourcestring Ich weiß nicht, was der Compiler damit macht, aber es ist auf jeden Fall veraltet. Dafür gibt es Resourcendateien und die ResourceManager-Klasse.

Sender.Lines.Add(timetostr(now) + ' : ' + TextMessage); Wie Robert schon sagte: Format. Ohne VCL.Net ist es dann Delphi-Referenz durchsuchenString.Format.

Delphi-Quellcode:
TLog = class
  private
    procedure ClearLog(Sender: TMemo);
    procedure AddMessageToLog(Sender: TMemo; TextMessage: string);
  end;
  TServerBefehle = class
  private
    procedure StopServer;
  end;
Da die Klassen keine Felder besitzen, nimm Klassenmethoden. Allerdings würde ich eher die Log-Klasse den Log verwalten lassen, z.B. in einer StringCollection. Dazu noch eine Methode zum Ausgeben in eine TextBox.

for i := 0 to length(TcpServerPreferences.Bindings) - 1 do Verabschiede dich von diesen hässlichen for-Schleifen, es gibt nun for-in-Schleifen .

.Free; Du willst massenweise Objekte freigeben, die überhaupt nicht IDisposable einbinden, was soll da passieren?
Garbage Collection

if FileExists(AFilename) = False then if not File.Exists(aFileName) then RightStr(AFilename, 4) String.SubString bzw. Path.GetExtension

function Tserver_mainform_form.CopyFile(AFileFrom: string; AFileTo: string): boolean; File.Copy

Die restlichen Ersetzungen von VCL-Klassen/Prozeduren liste ich nicht auf, die kannst du mithilfe des SDKs selbst ziemlich schnell korrigieren.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat