IMPRESSUM dotted_line KONTAKT dotted_line search dotted_line Contact dotted_line sitemap
214 PHP-Resource Mitglieder online


php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Blogs > AmicaNoctis
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

Bewerten

Fluent Interface in der GUI-Entwicklung

"Fluent Interface in der GUI-Entwicklung" bei Mister Wong speichern "Fluent Interface in der GUI-Entwicklung" bei YiGG.de speichern "Fluent Interface in der GUI-Entwicklung" bei Google speichern "Fluent Interface in der GUI-Entwicklung" bei del.icio.us speichern "Fluent Interface in der GUI-Entwicklung" bei Digg speichern "Fluent Interface in der GUI-Entwicklung" bei icio.de speichern "Fluent Interface in der GUI-Entwicklung" bei My Yahoo speichern
Veröffentlicht: 29-09-2009 um 17:08 von AmicaNoctis

Vor einigen Tagen beschloss ich, etwas zu ändern und zwar solchen Code:
Code:
this.setPaddingHor(5);
this.setPaddingVer(5);
this.setTitle("Klient");
this.setChild(new jsoox.jwit.Container(4, true));
this.getChild().setFillHor(true);
this.getChild().setFillVer(true);
this.getChild().setSpacing(5);
this.getChild().setChild(new jsoox.jwit.Label(), 0);
this.getChild().getChild(0).setFontSize("20px");
this.getChild().getChild(0).setFillHor(true);
this.getChild().getChild(0).setCollapseVer(true);
this.getChild().getChild(0).setText("TestFirma");
this.getChild().getChild(0).setTextAlign("left");
this.getChild().setChild(new jsoox.jwit.TitlePane(), 1);
this.getChild().getChild(1).setTitle("Kontakt");
this.getChild().getChild(1).setFillHor(true);
this.getChild().getChild(1).setCollapseVer(true);
this.getChild().getChild(1).setChild(new tsm.tos.ContactPane());
this.getChild().getChild(1).getChild().setFillHor(true);
this.getChild().getChild(1).getChild().setMarginHor(5);
this.getChild().getChild(1).getChild().setMarginVer(5);
...
Ich war schon eher einmal unzufrieden beim Programmieren von GUIs, damals hatte ich es noch mit unzähligen Variablen geschrieben:

Code:
this.setPaddingHor(5);
this.setPaddingVer(5);
this.setTitle("Klient");
var container1 = new jsoox.jwit.Container(4, true)
container1.setFillHor(true);
container1.setFillVer(true);
container1.setSpacing(5);
var label1 = new jsoox.jwit.Label();
label1.setFontSize("20px");
label1.setFillHor(true);
label1.setCollapseVer(true);
label1.setText("TestFirma");
label1.setTextAlign("left");
container1.setChild(label1, 0);
var titlePane1 = new jsoox.jwit.TitlePane();
titlePane1.setTitle("Kontakt");
titlePane1.setFillHor(true);
titlePane1.setCollapseVer(true);
var contactPane1 = new tsm.tos.ContactPane();
contactPane1.setFillHor(true);
contactPane1.setMarginHor(5);
contactPane1.setMarginVer(5);
titlePane1.setChild(contactPane1);
container1.setChild(titlePane1, 1);
this.setChild(container1);
...
Nun sollte es anders werden und ich beschloss, dass alle einfachen Setter ab sofort die aktuelle Instanz zurückgeben sollen. Setter, die z. B. Kindelemente oder andere Objekte hinzufügen, sollen das hinzugefügte Objekt zurückgeben. Die Änderungen in allen Widget-Klassen hat nicht mal besonders lange gedauert, sich aber imho durchaus gelohnt, weil man dadurch sofort mit dem Rückgabewert weiterarbeiten kann, statt das Objekt erst wieder anzusprechen. Durch konsequente Einrückungen weiß ich, auf welcher Ebene ich grade bin und so sieht der Code nun aus:

Code:
this
	.setPaddingHor(5)
	.setPaddingVer(5)
	.setTitle("Klient")
	.setChild(new jsoox.jwit.Container(4, true))
		.setFillHor(true)
		.setFillVer(true)
		.setSpacing(5)
		.setChild(new jsoox.jwit.Label(), 0)
			.setFontSize("20px")
			.setFillHor(true)
			.setCollapseVer(true)
			.setText("TestFirma")
			.setTextAlign("left")
			.getParent()
		.setChild(new jsoox.jwit.TitlePane(), 1)
			.setTitle("Kontakt")
			.setFillHor(true)
			.setCollapseVer(true)
			.setChild(new tsm.tos.ContactPane())
				.setFillHor(true)
				.setMarginHor(5)
				.setMarginVer(5)
				.getParent()
			.getParent()
		...
Das gefiel mir viel besser, die Idee selbst auch.

Heute habe ich durch Zufall gelesen, dass diese Methode schon seit 2005 bekannt ist und auch einen Namen hat: "Fluent Interface". Das ist übrigens ein sehr typisches Problem von mir. Ich schau mich zu wenig um, was es schon gibt. Dann habe ich eine Idee, von der ich selbst ganz begeistert bin, nur um kurze Zeit später festzustellen, dass ich damit viel zu spät komme.

Wem dieser Ansatz gefällt oder bisher auch unbekannt war, der sei herzlich eingeladen, einen Kommentar zu hinterlassen. Was ich davon hab? Na ist doch klar: ich weiß dann wenigstens, dass ich nicht die einzige bin, die bisher noch nie was von Fluent Interfaces gehört hat.

Gruß,

Amica

Digg this Post! Add Post to del.icio.us Bookmark Post in Technorati Furl this Post!
Kategorie: Kategorielos
Hits 4816 Kommentare 7 Stichworte bearbeiten Hinweis auf diesen Blog-Eintrag per E-Mail verschicken
« Zurück     Startseite des Blogs     Nächste »
Kommentare 7

Kommentare

  1. Alter Kommentar
    Hi Amica,

    ich habe mich im Zuge meiner Bachelorarbeit mit Fluent Interfaces beschäftigt. Schau mal auf Fluent-Interfaces.com nach. Ich habe ein kleines Tool entwickelt mit dem es möglich ist komplexere Fluent Interfaces zu modellieren. Sobald du nämlich noch Nebenbedingungen wie z.B. dass die Methoden nur in einer bestimmten Reihenfolge oder Methoden nur einmal aufgerufen werden dürfen wird das Erstellen eines Fluent Interfaces sehr umständlich.

    Grüße
    Der Philipp
    permalink
    Veröffentlicht: 12-10-2009 um 07:24 von wipeouter wipeouter ist offline
  2. Alter Kommentar
    Hi Philipp,

    ja, wenn man mit Mediatorklassen arbeitet, aber das tu ich ja in diesem Fall nicht. Die einfachste Variante (Setter gibt this zurück) reicht mir hier schon aus, um das fluent zu machen, zumal die Reihenfolge unerheblich ist und auch, ob eine Eigenschaft überhaupt gesetzt wird. Also keinerlei Seiteneffekte oder Abhängigkeiten.

    Aber dein Generator ist auf jeden Fall einen Blick wert, da ich inzwischen so ziemlich auf den Geschmack gekommen bin und in einem künftigen Projekt mal das volle Programm (mit Mediatorklassen) ausprobieren möchte.

    Gruß,

    Amica
    permalink
    Veröffentlicht: 13-10-2009 um 08:03 von AmicaNoctis AmicaNoctis ist offline
  3. Alter Kommentar
    Fluent-Interfaces sind nicht nur für solche einfachen Konfigurationsvorgänge sondern auch für ganze Programmabläufe in Kombination mit Exceptions hervorragend geeignet. Nutze ich auch immer sehr gerne.
    permalink
    Veröffentlicht: 14-01-2010 um 01:07 von PHP-Desaster PHP-Desaster ist offline
  4. Alter Kommentar
    10.0.0.1 ip login
    Thank you for such a well written article. It’s full of insightful information and entertaining descriptions. Your point of view is the best among many.
    gmail account login
    permalink
    Veröffentlicht: 09-05-2017 um 06:10 von Hong91 Hong91 ist offline
    Aktualisiert: 25-01-2018 um 08:50 von Hong91
  5. Alter Kommentar
    glücklich Ihrer Community beizutreten, danke euch für die Post! 192.168.1.1
    permalink
    Veröffentlicht: 24-05-2017 um 16:27 von malkovich malkovich ist offline
  6. Alter Kommentar

    like

    See a lot to identify these games. Do not worry, please play together, and that's what I need. happy wheels
    permalink
    Veröffentlicht: 25-01-2018 um 08:20 von happywheelsgame happywheelsgame ist offline
  7. Alter Kommentar
    Hey there I feel so fortunate to come over your blog you express it in a very easiest way I am very much active person over your blog pretty good to read your blog its quit interesting to read your blog always because it looks fresh all the time.
    10.0.0.1 Login - 10.0.0.1 Router Admin Login
    Gmail Account Login | www.Gmail.com Login
    permalink
    Veröffentlicht: 25-01-2018 um 08:48 von Hong91 Hong91 ist offline
 
Trackbacks 0

Trackbacks


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:27 Uhr.



Search Engine Friendly URLs by vBSEO 3.3.0