Laden...

Frage zu Codestruktur, Interface -> ja/nein

Erstellt von JunkyXL vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.205 Views
JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren
Frage zu Codestruktur, Interface -> ja/nein

Hi,
ich hoffe, ich treffe mit dem Thema das richtige Abteil.
meine Anwendung wächst und wächst, und zunehmend stelle ich fest, dass ich bestimmte Vorhaben besser realisieren kann.
Wie z.B. das Folgende:
Ich möchte, dass jede Form in meiner Anwendung ein gewisses Verhalten hat, und zwar bei jeder das selbe.*OnLoad, Einstellungen laden, ... *OnClose, Location, WindowState, ... speichern. *OnShown, Events wieder registrieren.

Dazu noch selbstdefinierte Virtual Methods, welche inkl. der oben genannten in einer Base Form definiert sind und ich in den anderen Forms überschreibe...
Hin und wieder vergesse ich ein paar Methoden zu überschreiben, bzw. es ist mir zu "mühselig" immer darauf achten zu müssen.
Da kam mir die Idee ein Interface zu nutzen, indem alle Grundverhalten definiert werden sollen und ich nur noch das Interface in jeder Form implementiere.
Nun die Frage, ob das von der Codestruktur angebracht ist, oder es da eine bessere Umsetzungsmöglichkeit gibt.

6.862 Beiträge seit 2003
vor 17 Jahren

Naja, Interfaces geben ja nur vor was die implementierende Klasse können muss. Es sagt in keinster Weise wie es erledigt werden muss, und gibt auch keinen Code vor.

Denke bei dir ist das Vorgehen mit ner Basisklasse besser wenn wirklich viel gleicher Code benutzt wird in den den Forms. Wenn du die Interfaces implementierst, hast du zwar mit Garantie immer die Funktionen die du wohl brauchst, aber dann ist nicht sichergestellt das die auch ordnungsgemäß aufgerufen werden.

Baka wa shinanakya naoranai.

Mein XING Profil.

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
ein Interface nutzt Dir ja nur dann etwas, wenn Du eine Instanz hast, die mit einem solchern Interface arbeitet und die entsprechenden Methoden darin aufruft.
Als reine Programmierhilfe würde ich das nicht unbedingt verwenden, das ist nicht der Zweck, zu dem sie da sind, und Du kannst genausogut vergessen, vom Interface abzuleiten wenn eine neue Form dazukommt. Du könntest das aber vielleicht mit einer abstrakten Basisklasse lösen.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren

Original von talla
Naja, Interfaces geben ja nur vor was die implementierende Klasse können muss. Es sagt in keinster Weise wie es erledigt werden muss, und gibt auch keinen Code vor.

Ähm.. das weiß ich 😉

Original von talla
Wenn du die Interfaces implementierst, hast du zwar mit Garantie immer die Funktionen die du wohl brauchst, aber dann ist nicht sichergestellt das die auch ordnungsgemäß aufgerufen werden.

Wieso das denn? Genau das hatte ich vor.

Original von MarsStein
und Du kannst genausogut vergessen, vom Interface abzuleiten wenn eine neue Form dazukommt.

Wieso denn?

6.862 Beiträge seit 2003
vor 17 Jahren

Naja, um die gewünschte Funktionalität zu gewährleisten müssen die Funktionen auch jeweils korrekt im Eventhandler aufgerufen werden. Das reicht aber nicht, denn du musst die ja jeweils auch noch für jede Klasse neu implementieren bei Interfaces. Da kann man auch leicht was vergessen.

Bei ner Basisklasse ist dies ja nicht der Fall. Da hast du den Code der Elternklasse auch in der Kindsklasse, musst also nur bei Änderungen was implementieren(okay bei virtuellen Funktionen musst du auch imlementieren). Deshalb würde ich aber die Basisklasse bevorzugen.

Baka wa shinanakya naoranai.

Mein XING Profil.

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren

Original von talla
Naja, um die gewünschte Funktionalität zu gewährleisten müssen die Funktionen auch jeweils korrekt im Eventhandler aufgerufen werden. Das reicht aber nicht, denn du musst die ja jeweils auch noch für jede Klasse neu implementieren bei Interfaces.

Schon klar. Das Ding ist ja gerade, dass der Code in jeder Klasse anders ist, und ich ihn deswegen nicht fix in der base Klasse einbinden kann. Ob ich also die Methoden überschreibe (die base Methoden sind größtenteils einfach nur leer) oder ich Regeln einbinde, in denen ich genausoviel Code schreibe, macht doch keinen Unterschied?!
Ich sehe da jetzt nicht ganz den Sinn, Interfaces nicht zu verwenden. Oder habe ich jetzt einen Aspekt falsch verstanden?

6.862 Beiträge seit 2003
vor 17 Jahren

Na okay, bin von ausgegangen dass die viel Code gemeinsam haben. Klar kannst du es dann auch mit Interfaces machen, aber ein kleines Problem hast du immer noch. Du stellst zwar sicher, dass die Klasse eine bestimmte Funktion implementiert, aber es ist immer noch nicht garantiert das die Funktion auch aufgerufen wird 😉 Von daher musst du da genauso aufpassen gg

Baka wa shinanakya naoranai.

Mein XING Profil.

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren

Und ich verstehe immer noch nicht, wieso das nicht gewährleistet sein soll, dass die Methode aufgerufen wird..
Habe ein Interface implementiert.
Ich rufe die Methoden in den entsprechenden Events in der Base Klasse auf, und prüfe vorher ab, ob der Typ vom Interface IsAssignableFrom(Kindklassentyp) ist.
Funktioniert wunderbar 🙂

6.862 Beiträge seit 2003
vor 17 Jahren

Ist halt so nen Zwischending von beiden was du grad hast. Aber ich verstehe nicht, wieso dir Interfaces die Arbeit erleichtert. Ob du nun Interfaces implementierst oder jeweils bei virtuellen Methoden die richtigen implementierst ist für mich fast egal 😉

Naja, vielleicht blick ich morgen auch mehr, ist schon spät 😉

Baka wa shinanakya naoranai.

Mein XING Profil.

2.921 Beiträge seit 2005
vor 17 Jahren

Wo Du z.B. interfaces benutzen musst, ist, wenn du eine lose Kopplung erreichen willst, z.B. mit Plugins die extern nachgeladen werden sollen, ohne dass du eine feste Referenz einbinden musst.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren

Original von talla
Ist halt so nen Zwischending von beiden was du grad hast. Aber ich verstehe nicht, wieso dir Interfaces die Arbeit erleichtert. Ob du nun Interfaces implementierst oder jeweils bei virtuellen Methoden die richtigen implementierst ist für mich fast egal 😉

Naja, vielleicht blick ich morgen auch mehr, ist schon spät 😉

Da die Methoden in ihren verschiedenen Klassen auch ihren eigenen Code haben, z.B. Control-Events registrieren, usw., nehm ich doch lieber Interfaces, und habe die 100%ige Garantie nichts auszulassen.