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