Protokoll kann nur als generische Einschränkung verwendet werden, da es selbst oder zugeordneten Typ hat. Wir können Objekte, die diesem Protokoll entsprechen, auf folgende Weise verwenden: Einer der ausgereiftesten und am weitesten verbreiteten Kommunikationsmechanismen wird vom Webdienst-Framework bereitgestellt. Neben der Wahl eines Kommunikationsframeworks müssen auch die eigentlichen Nachrichtenprotokolle standardisiert werden. Zum Beispiel, ob Webdienste mithilfe von SOAP über HTTP oder einfach mithilfe von RESTful-Diensten erstellt werden. Bei der Standardisierung auf SOAP-basierten Webdiensten muss auch die spezifische Version des SOAP-Protokolls vereinbart werden, d. h. SOAP v 1.1 oder SOAP v 1.2. Indem wir die Fabrik zu einem Protokoll machen, können wir mehrere Implementierungen davon haben, zum Beispiel eine spezielle Fabrik für die Testfälle. Die von verschiedenen Projektteams entwickelten Dienste könnten auf unterschiedlichen Kommunikationsmechanismen basieren. Daher kann ein Dienstinventar mit unterschiedlichen Dienstsätzen führen, die jeweils einem anderen Satz von Protokollen entsprechen. Wenn es um die Wiederverwendung von Diensten mit unterschiedlichen Kommunikationsprotokollen geht, ist eine Art Kommunikationsüberbrückungsmechanismus erforderlich. Beispielsweise sind Dienste, die mit dem JMS-Messagingprotokoll entwickelt wurden, nicht mit Diensten kompatibel, die .NET Remoting verwenden. Abgesehen von zusätzlichen Kosten erhöht der Einsatz einer solchen Überbrückungstechnologie den Latenz- und Kommunikationsaufwand.

Dies macht den Dienst weniger zu einer wiederverwendbaren und wiederverwendbaren Ressource[3] und widerspricht den Richtlinien des Service Composability Design Prinzips. Wir beginnen mit der Definition eines Resolver-Protokolls für das Service Locator Pattern. Es ist ein einfaches Protokoll mit nur einer Methode zum Erstellen einer Instanz, die dem übergebenen ServiceType-Typ entspricht. Als nächstes definieren wir unser ServiceFactory-Protokoll mit einem zugeordneten ServiceType-Typ. Unsere Factory erstellt Instanzen von Typen, die dem ServiceType-Protokoll entsprechen. Das Remoteprozeduraufrufmuster kann als sicherer Befehls- und Steuerungskanal verwendet werden, unabhängig davon, wo sich die aufgerufene Komponente befindet. 🎉 Mit Hilfe des AnyCellRow-Wrappers haben wir die Typanforderung bei der Anpassung an das Row-Protokoll löscht. Die init-Funktion ist ohne Klausel und wir haben jetzt einen heterogenen Sammlungstyp und dynamischen Dispatch zur Verfügung.

👍🏿 Bei der Wahl eines Kommunikationsrahmens müssen die Reife, die Skalierbarkeit und die Lizenzkosten berücksichtigt werden, da Gebäudedienste mit einem Protokoll, das in naher Zukunft veraltet sein wird, die Wiederverwendbarkeit solcher Dienste beeinträchtigen und erhebliche Zeit und Anstrengungen erfordern würden, um den Dienst neu zu gestalten. Der nächste Schritt besteht darin, eine Standardimplementierung hinzuzufügen, die eine schnelle Erweiterung für die Row-Protokollfunktionen und -eigenschaften verwendet. 💪🏾 Im obigen Code haben wir den AnyRow verwendet, um die Typanforderung zu löschen, wenn wir das Row-Protokoll entsprechen. Bei einem genauen Blick auf #line 20 sehen wir, dass es Einschränkungen für die init-Funktion mit der Klausel gibt: wo T.Model == I Dies sperrt uns auch in einen homogenen Sammlungstyp, wie auf #line 64 gezeigt, Es ist das leistungsstarke offene WAMP-Protokoll, das sich um alle Verbindungsanforderungen zwischen Ihren Anwendungskomponenten kümmert.