2016-05-20 12 views
1

Die Interface Segregation principle heißt es:Funktioniert das Null-Objektmuster nicht? Schnittstelle Trennprinzip?

Kunden sollten nicht auf Methoden angewiesen gezwungen werden, die sie nicht verwenden.

Im Null-Objektmuster tut die Null-Klasse, die die Schnittstelle implementiert, nichts damit. Was ist beabsichtigt.

Aber es ist abhängig von Methoden, die es nicht verwendet. Oder bricht es das Prinzip nicht, weil es tatsächlich nur davon abhängt, indem es in den implementierten Methoden nichts macht?

+2

Der Client * verwendet * die Methoden für das Nullobjekt. Dass die Methode nichts tut, ist für den Kunden undurchsichtig. –

+2

Der Punkt eines Null-Objekts ist, dass die Methoden * verwendet werden, obwohl; sie haben nur keine signifikante Wirkung. Wenn z. B. eine Schnittstelle eine Methode angibt, die eine Liste zurückgibt, kann die Nullobjekt-Implementierung dieser Schnittstelle eine leere Liste zurückgeben. Der Punkt ist, dass der Client, der dieses Null-Objekt verwendet, * die Methode aufruft, die eine Liste zurückgibt, und eine Liste abrufen muss. –

+0

Danke Joshua und Andy. Jetzt habe ich ein besseres Verständnis. – Mahmut

Antwort

0

Null Objektmuster bricht nicht Schnittstelle Trennung Prinzip per se.

Es ist nicht das Null-Objekt, das das ganze Prinzip brechen kann, aber es wird die Schnittstelle des Null-Objekts sein, die Mitglieder zeigen kann oder nicht, die nichts mit einer bestimmten Operation zu tun haben, in die das Objekt injiziert wird.

Wenn das Null-Objekt eine Schnittstelle und einen Teil des Projektes implementiert, kann ein reguläres Objekt mit dem tatsächlichen Implementierungen ihrer Mitglieder verwenden, und das Interface macht genau das, was ist eigentlich benötigte, dann ist das Schnittstelle Segregation Prinzip ist nicht durch diese gegebene Schnittstelle gebrochen.

2

Normalerweise nimmt das Null-Objektmuster keine Abhängigkeiten auf. Hier ist, wie ein typisches Null-Objekt wie folgt aussieht:

public class NullDataStore : IDataStore 
{ 
    public void StoreData(Data data) 
    { 

    } 
} 

Die NullDataStore Klasse hat in diesem Fall keine Abhängigkeiten und daher nicht auf Methoden abhängen, die sie nicht verwenden. Es bricht also nicht den ISP.