2016-06-28 36 views
0

Bei Verwendung von COM (Component Object Model), I'veread, dass Schnittstellen unveränderlich sind und dass neue Versionen von Schnittstellen explizit andere Namen haben, anstatt nur das Verhalten einer vorhandenen Schnittstelle zu ändern. Zum Beispiel wäre die neue Version ICollectionICollection2 oder ICollectionEx, obwohl letzteres nicht empfohlen wird (völlig verständlich).Wie werden COM "Regeln" durchgesetzt?

Ich sehe, dass es bei dieser Methode eine enorme Menge an Rückwärtskompatibilität auf Kosten der Ästhetik gibt (was im großen Schema recht kleinlich ist). Wird diese unveränderliche Schnittstellenidee durchgesetzt, und wenn ja, wie und gibt es andere Systeme, die diesen Ansatz verfolgen?

+2

Die Regeln werden "durchgesetzt" durch die Tatsache, dass etwas abstürzt und brennt, wenn Sie sie verletzen. Code, der die Rückwärtskompatibilität bricht, ist im Wesentlichen rückwärtskompatibel. –

+1

Mögliches Duplikat von [Warum ist der COM-Schnittstellenvertrag unveränderlich?] (Http://stackoverflow.com/questions/29056322/why-is-the-com-interface-contract-immutable) Die Unveränderlichkeit wird durch Konvention erzwungen. (COM hat kein unendliches Wissen. Es weiß nicht, dass die Schnittstelle, die du heute definierst, eine Modifikation der Schnittstelle ist, die du gestern definiert hast.) –

+0

@IgorTandetnik Fair genug. –

Antwort

-1

Die kurze Antwort ist, dass es nicht "durchgesetzt" wird - außer in seltenen Fällen, in denen einige Special Ops Typen in schwarzen Hubschraubern mitten in der Nacht auftauchen und Sie nach Redmond bringen.

Ich habe es nicht gefolgt verfolgt und nichts bricht. Ich würde nicht schwören darauf, aber wenn Sie typelibs von Microsoft Office-Anwendungen vergleichen, würde ich sagen, dass sie praktischer als idealistisch sind (shhh .... manchmal ändern sich die Schnittstellen).

In der Praxis, wenn Sie immer Funktionen am Ende der Schnittstellen hinzufügen, können Sie Ihren Weg schummeln, um keine Schnittstellen neu zu erstellen. Das große Problem besteht darin, dass ein Kunde keine neuen Versionen Ihres Programms verwendet, sondern Kunden, die ältere Versionen als das verwenden, gegen das sie kompiliert haben.