AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

"F"-Prefix beim TJSONUnMarshal

Ein Thema von Der schöne Günther · begonnen am 1. Okt 2014 · letzter Beitrag vom 2. Okt 2014
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: "F"-Prefix beim TJSONUnMarshal

  Alt 1. Okt 2014, 11:58
Grundproblematik ist eben die Konvention, dass die Felder einer Klasse automatisch den Prefix F bekommen.
Delphi-Quellcode:
TFoo = class
private
  FVal : string;
public
  property Val : string read FVal write FVal;
end;
Bei der Serialisierung werden aber eben nicht die Properties, sondern die Felder serialisiert (was auch gut ist). EMBA hat nun einfach dieses Prefix F dabei berücksichtigt und zusätzlich aber auch noch das Attribut JSonName eingeführt.

Damit ist doch alles gut. Benenne die Felder nach der Konvention oder hänge ein Attribut an das Feld.
Warum kannst du dein Feld nicht einfach FsomeField benennen? Weil du in den Ableitungen das als someField verwenden möchtest?

Kein Problem:
Delphi-Quellcode:
type
  TMyType = class(TObject)
  private
    FsomeField : Integer;
    FFieldWithStupidName: Integer;
  protected
    property someField: Integer read FsomeField write FsomeField;
    property FieldWithStupidName: Integer read FFieldWithStupidName write FFieldWithStupidName;
  end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.222 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: "F"-Prefix beim TJSONUnMarshal

  Alt 1. Okt 2014, 12:13
Danke für die Antwort

Grundproblematik ist eben die Konvention, dass die Felder einer Klasse automatisch den Prefix F bekommen. [...]
Warum kannst du dein Feld nicht einfach FsomeField benennen?
Bitte nicht

All mein Hass diesen prähistorischen Variablen-Prefixen. Wir haben uns von dieser Konvention eigentlich komplett gelöst. Da bleibe ich lieber bei völlig unnötigen Attributen für die Felder.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: "F"-Prefix beim TJSONUnMarshal

  Alt 1. Okt 2014, 12:17
Kann ich nicht nachvollziehen, denn ich benutze diesen Prefix andauernd und sehe keine Nachteile, sondern nur Vorteile.

Anhand des Prefix sehe ich sofort aus welchem Scope die denn nun kommt:
  • Field
  • Argument
  • Local
Aber jeder wie er will
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.824 Beiträge
 
Delphi 12 Athens
 
#4

AW: "F"-Prefix beim TJSONUnMarshal

  Alt 1. Okt 2014, 12:47
Aber jeder wie er will
Sehr richtig!

Ich habe allerdings die Erfahrung gemacht, daß es häufig besser ist, sich mit den Standards seines Entwicklungswerkzeugs anzufreunden, als denen entgegen zu arbeiten. Das fängt schon bei den Namens-Konventionen und der Code-Formatierung an. Schon vor geraumer Zeit habe ich mich in diesen Punkten weitestgehend den Delphi-Sourcen angepasst. Das erfordert zum Einen kein Umdenken, wenn ich meine eigenen oder die Delphi-Sourcen lese, und zum Anderen gibt es auch keine Hakelpunkte, die integrierter Code-Formatierung an diese Vorgaben anzupassen (die stimmen nämlich schon bei der Installation).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: "F"-Prefix beim TJSONUnMarshal

  Alt 1. Okt 2014, 13:03
Kann ich nicht nachvollziehen, denn ich benutze diesen Prefix andauernd und sehe keine Nachteile, sondern nur Vorteile.

Anhand des Prefix sehe ich sofort aus welchem Scope die denn nun kommt:
  • Field
  • Argument
  • Local
Aber jeder wie er will
Bei mir ergibt sich das aus aus der Tatsache, das Methoden so klein sind, das sie auf eine (Bildschirm-) Seite passen und private Felder nur im Getter und Setter sowie im Konstruktor angefasst werden. Damit fällt schon mal das 'F' weg (bzw. könnte). Argumente und lokale Variablen gibt es eh nicht viele in einer Methode und wenn ich mal wissen muss, ob 'X' ein Argument ist oder nicht, geh ich mit dem Cursor rauf.

Nachteile? Na ja, es heißt nicht 'LTotalSize', sondern 'total size' (im englischen) und daher leidet die Lesbarkeit (=> Clean Code).

Aber Delphi ist Delphi und da ist das (zumindest mit den Feldern) so. Und wenn das so usus ist, dann macht man das eben. Man will ja nicht unangenehm auffallen.

Übrigens habe ich das 'a' bei einem Parameter immer als 'ein' gelesen, also 'a Customer' und dann eben folgerichtig 'anObject'. Das ist dann wenigstens lesbar und hat auch irgendwie etwas Logisches, denn eine lesbare Methode mit einem Kunden-Argument ist eben 'Save(aCustomer : TCustomer)'.

Aber wie sagst Du so schön: Jeder wie er will...
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.222 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: "F"-Prefix beim TJSONUnMarshal

  Alt 1. Okt 2014, 16:58
Rest.JsonReflect.pas:
Delphi-Quellcode:
function TJSONUnMarshal.ConvertFieldNameFromJson(AObject: TObject; const AFieldName: string): string;
[...]
    // Delphi Fieldname usually start with an "F", which we don't have in JSON:
    // FName = 'Elmo' => {"Name":"Elmo"}
                                        
    LFieldName := 'F' + AFieldName;
    Result := LFieldName;
[...]
Fest einkodiert. All mein Hass. Ganz ehrlich...

Hätte man das nicht wenigstens einstellbar machen können?

Im "Delphi Language Guide: Fields" wird auch nichts mehr mit F-geprefixed. Woher soll ich die Weisheit mit F eigentlich nehmen?

Ganz abgesehen davon dass in der Dokumentation zu Json darüber auch nicht das geringste zu finden ist.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: "F"-Prefix beim TJSONUnMarshal

  Alt 1. Okt 2014, 17:21
Was für ein Dreck.
Unterm Strich ist es ja ganz brauchbar, den 'inneren Zustand' eines Objekts zu (de-)serialisieren, aber das ist einfach nicht etwas, was man als JSON (oder XML) nach außen geben sollte. 'Außen' ist irgendwie 'öffentlich', also so 'publik' machen oder 'publizieren' oder wie man das nennt. Wie heißt das doch gleich auf Englisch?

'Teeren und Federn' war zu meiner Zeit das adäquate Mittel, den Programmierer für derartige Ergüsse öffentlich zu würdigen.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.014 Beiträge
 
Delphi 2009 Professional
 
#8

AW: "F"-Prefix beim TJSONUnMarshal

  Alt 1. Okt 2014, 18:19
Was für ein Dreck.
Unterm Strich ist es ja ganz brauchbar, den 'inneren Zustand' eines Objekts zu (de-)serialisieren, aber das ist einfach nicht etwas, was man als JSON (oder XML) nach außen geben sollte.
Warum 'sollte' man es nicht können? Sicherheitsbedenken kann man natürlich anführen, über Serialisierung kann man immer auch "private" Daten eines Objektes extern sichtbar machen. Aber alle privaten Daten sind generell zur Laufzeit sichtbar, da sie irgendwo im Speicher stehen (Beweis: der Debugger kann private Variablen anzeigen).

Nur public/published Daten zu serialisieren wäre sinnfrei, da dadurch der Objektzustand unvollständig erfasst wird.

In der Java Welt kenne ich es so, dass man die Zugriffsmodifizierer (public, private & Co.) als Compile-Time-Feature ansieht und die Serialisierung als Laufzeitfeature. Zweck der Serialisierung ist es einfach nur, ein Objekt in eine Datei- oder anderen Speicherungsform zu konvertieren, die eine spätere Rekonstruktion des Objekts erlaubt. (http://stackoverflow.com/a/4245316/80901)
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.824 Beiträge
 
Delphi 12 Athens
 
#9

AW: "F"-Prefix beim TJSONUnMarshal

  Alt 1. Okt 2014, 17:43
Woher soll ich die Weisheit mit F eigentlich nehmen?
Object Pascal Style Guide
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.222 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: "F"-Prefix beim TJSONUnMarshal

  Alt 1. Okt 2014, 17:52
Das Enthält ein "Copyright 1995". Da bin ich noch aufs Töpfchen gegangen.

Meine Ausrede steht weiterhin. Die "aktuellen" Styleguides sprechen überhaupt nicht mehr von einem F in Feldern.

Und ja, ich habe grade schlechte Laune.

Geändert von Der schöne Günther ( 1. Okt 2014 um 17:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:58 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