Frage

Ich bin Codierung einen Rahmen nach oben (in Java, aber Frage ist generisch), in dem ich eine Reihe von Schnittstellen für Kunden bieten werde zu implementieren. Die Funktionen im Rahmen werden darauf verlassen, wie die Implementierungsklassen werden constructued werden, das heißt, Thay auf diesen Implementierungen abhängen andere Instanzen von Schnittstellen zur Verfügung zu stellen.

Zum Beispiel könnte ich haben:

Interface IContribution {
   public IMyStuff getMyStuff();
   public IHelper getHelper();
}

Interface IMyStuff {
     public void doSomeMethod(IHelper helper);
}

Wie kann ich sicherstellen, dass diese Instanzen von IMyStuff und IHelper stehen zur Verfügung?

Eine Methode wäre, die ‚Getter‘ Methoden in der Schnittstelle zu erstellen und in meinem Rahmen sorgfältig für null Objekte überprüfen zurückgegeben.

Eine andere Möglichkeit wäre, abstrakte Klassen zu erstellen, die eine Fabrik implementieren, die implementiert werden (unter Verwendung einer Strategie-Muster) die Interface-Methoden aufruft. Aber das trotzt der Tatsache, dass ich die Schnittstelle in erster Linie haben. Kunden sollten dann die abstrakte Klasse verwenden. Aber sie können dies umgehen, indem sie die Schnittstelle statt die abstrakte Klasse. Deshalb soll ich nicht die Schnittstelle zur Verfügung stellen, sondern nur die abstrakte Klasse ...

Also, was sind Ihre Ideen dazu, was dies ein pragmatischer Ansatz ist?

War es hilfreich?

Lösung

  

Wie kann ich sicherstellen, dass diese Instanzen von IMyStuff und IHelper stehen zur Verfügung?

Wenn die Kunden sind verantwortlich für die Umsetzung der Schnittstellen und Klassen selbst, ich würde sagen, es ist ihre Verantwortung, um sicherzustellen, dass diese Instanzen zur Verfügung -. Ich würde mich nicht mit Sorge es in meinem eigenen Code setzen

Andere Tipps

Um einen guten Rahmen zu bauen, müssen Sie gleichzeitig eine Anwendung bauen um ihn herum. Auf diese Weise werden Sie den Schmerz Ihre Kunden ertragen wissen und verstehen, bevor es auf ihnen aufgedrängt wird.

Mit anderen Worten, beginnen Sie mit: Wie würden meine Kunden mit dieser Anwendung arbeiten? Wie müssen sie mit ihm arbeiten?

Sie werden sofort erkennen, dass der einfachste Weg, aus ihrer Sicht, geht am besten sein.

Sie können nicht gewährleisten, ist es mit Schnittstellen allein, kein Verhalten gibt.

ich mit dem philosphy defensiver Programmierung im Rahmen übereinstimmen, hilft die Entwickler vermeiden, Fehler zu machen.

Sie können ein Factory-Objekt liefern:

public class MyPoliceman {
    public IContribution makeContributor( IMyStuff stuffer, IHelper helper)
                    throws BadAssociatesException {

     // check validity of stuffer and helper here, throw exceptions if null
    }
}

Dann können wir zumindest für NULL-Werte usw. überprüfen

Mit einigen dachten, es ist in der Regel möglich, die Entwickler geben helfen. In einigen Fällen sind die besten Sie tun können, ist zu stoppen Fehler und melden sie craefully. Zum Beispiel hier könnte ein völlig in Ordnung IHelper auf Ihre Fabrik übergeben werden, aber später Aktionen auf der Klasse könnten es unfähig machen. (ZB. Das Bild war es eine Datei, und ein Nebeneffekt geschlossen später die Datei.) Dann alles, was Sie tun können, ist Falle des resultierenden Fehlerzustand, notieren Sie einen Fehler irgendwo und (wahrscheinlich) eine Ausnahme werfen. Dann wird zumindest der Entwickler hat eine Ahnung, was zu beheben.

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