AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Einfache Datentypen schnell zusammenbauen?
Thema durchsuchen
Ansicht
Themen-Optionen

Einfache Datentypen schnell zusammenbauen?

Ein Thema von Der schöne Günther · begonnen am 27. Mai 2014 · letzter Beitrag vom 29. Mai 2014
Antwort Antwort
Seite 1 von 2  1 2      
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Einfache Datentypen schnell zusammenbauen?

  Alt 27. Mai 2014, 18:55
Kommt halt drauf an, ob man das ganze (Java-„Enterprise“-)Gedöhns wirklich braucht, vor allem der Sinn des Interfaces erscheint mir hier fraglich.

Du kannst dir unter Delphi aber, um Tipparbeit zu sparen, Templates (nicht zu verwechseln mit Generics) definieren (das funktioniert dann genau wie die Autovervollständigung von Schleifen etc). Unter Delphi 2006 ging das bei Bearbeiten → Templates, weiß nicht, ob sich das inzwischen geändert hat.

Ich hatte mir damals (bevor es Generics gab) z.B. mal ein solches Template für eine typensichere TObjectList geschrieben:

XML-Code:
<?xml version="1.0" encoding="utf-8" ?>
<codetemplate   xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
            version="1.0.0">
   <template name="objlist" invoke="manual">
      <point name="TMyObjectList">
         <text>
            TMyObjectList
         </text>
         <hint>
            Klassenname der Liste
         </hint>
      </point>
      <point name="TMyObject">
         <text>
            TMyObject
         </text>
         <hint>
            Klassenname der Listeneinträge
         </hint>
      </point>
      <description>
         Typensichere Objektliste
      </description>
      <code language="Delphi" context="typedecl" delimiter="|">
<![CDATA[
|*||TMyObjectList| = class(TObjectList)
|*|protected
|*||*|function GetItem(Index: Integer): |TMyObject|;
|*||*|procedure SetItem(Index: Integer; AObject: |TMyObject|);
|*|public
|*||*|function Add(AObject: |TMyObject|): Integer;
|*||*|function Extract(Item: |TMyObject|): |TMyObject|;
|*||*|function Remove(AObject: |TMyObject|): Integer;
|*||*|function IndexOf(AObject: |TMyObject|): Integer;
|*||*|procedure Insert(Index: Integer; AObject: |TMyObject|);
|*||*|function First: |TMyObject|;
|*||*|function Last: |TMyObject|;
|*||*|property Items[Index: Integer]: |TMyObject| read GetItem write SetItem; default;
|*|end;

{ |TMyObjectList| }

function |TMyObjectList|.Add(AObject: |TMyObject|): Integer;
begin
|*|Result := inherited Add(AObject);
end;

function |TMyObjectList|.Extract(Item: |TMyObject|): |TMyObject|;
begin
|*|Result := |TMyObject|(inherited Extract(Item));
end;

function |TMyObjectList|.First: |TMyObject|;
begin
|*|Result := |TMyObject|(inherited First);
end;

function |TMyObjectList|.GetItem(Index: Integer): |TMyObject|;
begin
|*|Result := |TMyObject|(inherited GetItem(Index));
end;

function |TMyObjectList|.IndexOf(AObject: |TMyObject|): Integer;
begin
|*|Result := inherited IndexOf(AObject);
end;

procedure |TMyObjectList|.Insert(Index: Integer; AObject: |TMyObject|);
begin
|*|inherited Insert(Index, AObject);
end;

function |TMyObjectList|.Last: |TMyObject|;
begin
|*|Result := |TMyObject|(inherited Last);
end;

function |TMyObjectList|.Remove(AObject: |TMyObject|): Integer;
begin
|*|Result := inherited Remove(AObject);
end;

procedure |TMyObjectList|.SetItem(Index: Integer; AObject: |TMyObject|);
begin
|*|inherited SetItem(Index, AObject);
end;
]]>
      </code>
   </template>
</codetemplate>
Aufrufen kann man ein solches Template dann, indem man im Editor Strg+Leerzeichen drückt und den Templatenamen (oder zumindest den Anfangsbuchstaben eingibt).

Von solches Fällen abgesehen verfolge ich aber eher die Philosophie, möglichst jedes einzelne Zeichen von Hand einzutippen, gerade weil man sich so drei mal überlegt, ob der Code wirklich so lang sein muss, oder ob es nicht auch einfacher und kürzer geht.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Einfache Datentypen schnell zusammenbauen?

  Alt 27. Mai 2014, 20:01
Wozu benötigst Du für ein DTO ein Interface? Ein reines Datenobjekt ist doch genauso dumm wie ein Interface, also: Weg damit.

Es bleibt also, ein 'Property ' vor jedes Feld zu schreiben und dann mit der Codevervollständigung den Rest erledigen zu lassen. Da es hier eh keine Logik gibt, reicht es doch, die Daten in privaten Feldern abzulegen. Einen Setter, der eventuell den Status des Objektes überarbeitet (Modified, Unmodified) kann man noch nachpflegen.

Ansonsten gibt es -zumindest bei VS- Refactoring-Tools, um z.B. aus einer Klasse das Interface zu extrahieren und -wie schon erwähnt- Templates, um das immer gleiche Tippen von Pattern zu vereinfachen, z.B.:

Delphi-Quellcode:
Procedure SetFoobar (Const Value : String);
Begin
  if Foobar = Value then exit;
  fFoobar := Value;
  RaisePropertyChanged ('Foobar');
End;
Aber wenn dein Beispiel nur ein Beispiel war, dann.. dann sind Refactoring-Tools dein Freund. Da gibt es für Delphi einige Wenige, die sich lohnen, soweit ich das mitbekommen habe.

Geändert von Dejan Vu (27. Mai 2014 um 20:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.353 Beiträge
 
Delphi 12 Athens
 
#3

AW: Einfache Datentypen schnell zusammenbauen?

  Alt 27. Mai 2014, 20:06
Joar, ich hatte mir war auch schonmal gewünscht, daß man sich von delphi automatisch Interfaces erstellen lassen kann.
Die sollte der Compiler z.B. aus Public-Sachen der entsprechend markierten Objekt-Definition generieren.

Ansonsten könnte man sich natürlich auch verschiedene Helferlein erstellen, welche (ähnlich der Klassenvervollständigung) die Definitionen synchronisieren.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Einfache Datentypen schnell zusammenbauen?

  Alt 27. Mai 2014, 20:24
Na, ganz so synchronisierend geht das dann in VS doch nicht. Mit Resharper deklarier ich im Interface eine neue Property und wähle dann 'Implement member in derived classes'.

Aber 'extract interface' gibt es doch in Delphi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.353 Beiträge
 
Delphi 12 Athens
 
#5

AW: Einfache Datentypen schnell zusammenbauen?

  Alt 27. Mai 2014, 20:35
Wer die Features der IDE nicht nutzt, ist selber Schuld.


Du fängst dort an:
Delphi-Quellcode:
type
  |
danach tippst du Folgendes
Code:
classc[strg+leer]Adresse[enter]
und dann wieder hoch zur Deklaration (Strg+Shift+Hoch) und ab in den privaten Teil

Code:
propgs[strg+leer]vorname[tab]string[enter]
hoch
Code:
propgs[strg+leer]nachname[tab]string[enter]
hoch
Code:
propgs[strg+leer]straße[tab]string[enter]
hoch
Code:
propgs[strg+leer]hausNr[tab]Integer[enter]
fertig
(für String und Integer kann man natürlich auch wieder die Codevervollständigung verwenden, wenn man die nicht ausschreiben möchte)


Ich hab mir dafür allerdings das fehlende Property-Template "progs" für propety {Name}: {Type} read F{Name} write Set{Name} selber gebastelt.





Oder
Delphi-Quellcode:
type
  TAdresse = class
  private
  public
    constructor Create; override;
    destructor Destroy; override;
                                  
    property Vorname: string read FVorname write SetVorname;
    property Nachname: string read FNachname write SetNachname;
    property Straße: string read FStraße write SetStraße;
    property HausNr: string read FHausNr write SetHausNr;
  end;
Und dann nur noch die Klassenvervollständigung (Strg+Shift+C).
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (27. Mai 2014 um 20:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.658 Beiträge
 
Delphi 12 Athens
 
#6

AW: Einfache Datentypen schnell zusammenbauen?

  Alt 28. Mai 2014, 07:17
Der Konstruktor von TObject ist weder virtuell noch dynamisch, kann also nicht überschrieben werden (d.h. "override" wech)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.353 Beiträge
 
Delphi 12 Athens
 
#7

AW: Einfache Datentypen schnell zusammenbauen?

  Alt 28. Mai 2014, 09:09
Der Konstruktor von TObject ist weder virtuell noch dynamisch, kann also nicht überschrieben werden (d.h. "override" wech)
Joar, sag das mal Delphi.

Ist wohl nach dem Motto "besser zu viel, als zu wenig", denn die Override hatte Delphi generiert.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Einfache Datentypen schnell zusammenbauen?

  Alt 29. Mai 2014, 11:36
... vor allem der Sinn des Interfaces erscheint mir hier fraglich.
Ich kann das gut verstehen...

Seit ARC, bin ich ein Fan von Interfaced Objects... Denn seit ich für Android & iOS Programmiere, vergesse ich auf Windows Seite notorisch das Free...

Auch für die Wiederverwendbarkeit des Codes... Stichwort "Dependency Injection" ist es sinnvoll.

Grüsse Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.945 Beiträge
 
Delphi 12 Athens
 
#9

AW: Einfache Datentypen schnell zusammenbauen?

  Alt 29. Mai 2014, 11:48
Ich hatte mir damals (bevor es Generics gab) z.B. mal ein solches Template für eine typensichere TObjectList geschrieben:
Dann doch lieber als .inc Datei ohne die Klassen alle hinzuschreiben... das ging auch schon bevor es Generics gab. Das sah bei mir so aus:
Delphi-Quellcode:
{$IFNDEF COMPILER_14_UP}
  TTypedObjectListItem = TPosScreenElement;
{$define NoNewTypeSection}
{$include 'TypedObjectListTemplate.inc'}
  TPosScreenElementList = class(TTypedObjectListTemplate)
{$ELSE}
  TPosScreenElementList = class(TObjectList<TPosScreenElement>)
{$ENDIF}
Und so weiter... lief mit Delphi 5 wie mit XE.

Da die Deklarationen ansonsten bei der generischen Variante gleich waren, lief der Quelltext mit Template und echten Generics parallel.
Sebastian Jänicke
AppCentral

Geändert von jaenicke (29. Mai 2014 um 16:46 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#10

AW: Einfache Datentypen schnell zusammenbauen?

  Alt 29. Mai 2014, 12:30
So richtig lesbar/übersichtlich ist das ja nicht gerade...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:27 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