- Ad -
IMPRESSUM dotted_line KONTAKT dotted_line search dotted_line Contact dotted_line sitemap
371 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 18: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 4486 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 08: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 09: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 02:07 von PHP-Desaster PHP-Desaster ist offline
  4. Alter Kommentar
    Thank you for the information you provide, it helped me a lot! it's great that I known this site! Can you sharing some updates on how you have made this powerful post! hotmail account login | hotmail email login
    permalink
    Veröffentlicht: 09-05-2017 um 07:10 von Hong91 Hong91 ist offline
  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 17:27 von malkovich malkovich ist offline
  6. Alter Kommentar
    Xboix live codes are available on free xbox codes . Visit today to get them
    permalink
    Veröffentlicht: 09-09-2017 um 08:19 von nishgau nishgau ist offline
  7. Alter Kommentar
    I clicked to your website and it’s quite interesting. I see so many things that I haven’t known before. Thank you for submitted your website.

    Lily Oliver | instagram video downloader
    permalink
    Veröffentlicht: 28-10-2017 um 11:41 von lilyoliver lilyoliver ist offline
 
Trackbacks 0

Trackbacks


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:19 Uhr.



Search Engine Friendly URLs by vBSEO 3.3.0