2009-06-03 2 views
6

Zum Beispiel (obwohl es keine Schnittstelle ist) hat die Stream-Klasse in .NET eine von Stream.Null bereitgestellte Implementierung, die einfach die Daten verwirft. PowerShell hat Out-Null.Gibt es ein anerkanntes Muster für nutzlose Objekte, die eine Schnittstelle implementieren?

In Anwendungen, die ich entwickelt habe, habe ich es oft nützlich gefunden, eine Schnittstelle IFoo mit einer Standard-Implementierung NullFoo oder ähnlich zu implementieren, wenn es vorzuziehen ist, eine sinnlose Implementierung zu haben, anstatt ein Objekt überhaupt nicht zu übergeben.

Meine Frage ist, wie ich mich auf diese Praxis beziehen sollte, um eine Architektur zu dokumentieren oder zu erklären? Gibt es dafür einen anerkannten Namen oder ein GoF/Fowler Designmuster? http://en.wikipedia.org/wiki/Null_Object_pattern

Antwort

5

Yep:

3

Anscheinend hat es einen Namen, „NullObject“, aber die Frage eine andere Facette hat:

Von den meine ganzen Projektumsetzung beginnen entweder Stub besteht auf Methoden oder Daten Senker.

Ich benutze den Begriff "Stub", der sich auf externe Schnittstellen bezieht, die noch keine Implementierung haben (aber bereits eine sinnvolle Rückgabe geben, so dass Sie das Projekt vom ersten Tag an erstellen können).

Ich verwende einen "Sinker", der sich auf eine Schnittstelle bezieht, die es mir erlaubt, Daten dorthin zu leiten, aber wirklich geht es nirgends von dort, und es ist nicht der Absenderfehler (so wäre es umständlich zu codieren "tue es nicht send "Bedingung in diesem Umfang".

Muss eine vollständige Build erreichen, UND dann beginnen wir mit der Codierung. Mit der Zeit werden fast alle Stubs funktionsfähig (und einige werden Daten behandeln oder quellen) und fast alle Senkungen werden funktionsfähig. Bei Code-Reviews finden wir, dass einige Platinen aufhören zu existieren, können andere gruppiert werden, etc, etc.

1
  • Das Objekt scheint eine Null Object genannt zu werden, wie andere Plakate
  • darauf hingewiesen haben, wenn Sie programmieren In der .Net-Umgebung möchten Sie möglicherweise die Microsoft-Konvention befolgen, die 'Empty' (wie in String.Empty) ist. Siehe die folgenden .Net BCL Examples Search
+0

Stream.Null vs Stream.Empty – dss539

Verwandte Themen