Was sollte ich verwenden: functors, Schnittstellen oder abstrakte Methoden, wenn die Schicht eine Abstraktion (Kompatibilität) zu schreiben? (D-Sprache)

StackOverflow https://stackoverflow.com/questions/790041

  •  16-09-2019
  •  | 
  •  

Frage

Zum Beispiel: a. Kompatibilitätsschicht zwischen Scripting-Objekten (wie Strings, Arrays) oder Scripting-Engines (. Eval (), readfile () usw.)

War es hilfreich?

Lösung

Ohne mehr Kontext, müsste ich Schnittstellen sagen, wie gut. Bedenken Sie, dass Sie eine Funktion oder delegieren als Schnittstelle mit einer einzigen Methode darstellen kann und dass abstrakte Klassen sind nur Schnittstellen mit möglicherweise einige Methoden, die bereits umgesetzt werden.

Das heißt, es hängt wirklich davon ab, was Sie erreichen wollen. Schnittstellen eignet sich für die Fälle, in denen Sie viele Objekte mit einer gemeinsamen Schnittstelle, aber potenziell unterschiedliche Implementierungen haben. Wenn Sie zum Beispiel ein sehr einfaches Callback-Systems für Plugins Gestaltung (d.h .: lassen Sie die Plug-Haken bestimmten Ereignisse in der Host-Anwendung), dann die Delegierten für Ihre Bedürfnisse wahrscheinlich einfacher und ausreichend sind.

Denken Sie auch daran, dass, wenn Sie mit Schnittstellen gehen zu tun, werden Sie wahrscheinlich eine gewisse Art und Weise müssen für die Host-Instanzen instanziieren. Der einfachste Weg, dies zu tun ist durch einen Delegierten mit dem Host unter einem eindeutigen Namen zu registrieren.

Abstrakte Klassen sind nur dann sinnvoll, wenn Sie Schnittstellen verwenden und eine Standard-Implementierung einiger Dinge zu liefern. Eine bessere Lösung ist in diesem Fall stattdessen eine tatsächliche Schnittstelle haben, und die Standardimplementierung als mixin liefern.

Andere Tipps

Schnittstellen hat meine Stimme. Auf diese Weise, so lange, wie Sie die Schnittstelle definieren jeder Entwickler wird etwas kompatibel ziemlich leicht in der Lage sein, zu schreiben, ohne dass Sie ihnen zu viel Code zu verteilen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top