2008-09-16 17 views
3

Können wir eine 100% ige Entkopplung zwischen Komponenten eines Systems oder verschiedenen Systemen erreichen, die miteinander kommunizieren? Ich denke nicht, dass es möglich ist. Wenn zwei Systeme miteinander kommunizieren, sollte ein gewisses Maß an Kopplung zwischen ihnen bestehen. Habe ich recht?Können wir 100% Entkopplung erreichen?

Antwort

0

Sie können das erreichen. Stellen Sie sich zwei Komponenten vor, die über das Netzwerk miteinander kommunizieren. Eine Komponente kann unter Windows laufen, andere unter Unix. Ist das nicht 100% Entkopplung?

+0

Nicht wirklich. Sie sind durch das Protokoll miteinander verbunden, mit dem sie miteinander reden. Obwohl ich zustimme, dass dies eine Art "100% ige Entkopplung" ist, glaube ich nicht, dass eine 100% ige Entkopplung weder möglich noch machbar ist. – Statement

2

Wenn Komponenten zu 100% entkoppelt sind, bedeutet dies, dass sie nicht miteinander kommunizieren.

Eigentlich gibt es different types of coupling. Aber die allgemeine Idee ist, dass Objekte nicht gekoppelt sind, wenn sie nicht voneinander abhängen.

0

Zumindest muss der Firewall-Schutz von einer bestimmten Schnittstelle aus mindestens den Verkehr von jeder Maschine zur anderen ermöglichen. Dies allein kann als eine Form der "Kopplung" betrachtet werden, und daher ist die Kopplung Maschinen, die zumindest auf einer bestimmten Ebene kommunizieren, inhärent.

0

Dies ist erreichbar durch die Einführung einer Kommunikationsschnittstelle oder eines Protokolls, die beide Komponenten verstehen und keine direkten Daten zwischen den Komponenten übertragen.

+0

Ja, aber wenn wir das Protokoll in der Zukunft ändern, müssten wir beide Komponenten ändern. Wäre das nicht Kopplung? –

+0

Nun, nein, soweit ich den Begriff "Kopplung" verstehe. Entkopplung ist, wenn die beiden Komponenten nichts voneinander wissen. Sie könnten beide etwas von einer dritten Komponente, z.B. das Protokoll. –

0

Nun, zwei Webservices, die sich nicht aufeinander beziehen, könnten ein gutes Beispiel für 100% Entkoppelung sein. Die Kopplung würde dann in Form einer App util kommen, die sie miteinander verbindet, indem sie beide verwendet.

Kopplung ist nicht von Natur aus schlecht, aber Sie müssen solide Beurteilung aufrufen, wann es zu tun ist (ist es nur bei der Implementierung oder in Ihrem Rahmen selbst?) Und wenn die Kopplung sinnvoll ist.

2

Rechts. Selbst wenn Sie auf eine Schnittstelle oder ein Protokoll schreiben, verpflichten Sie sich zu etwas. Sie können friedlich 100% ige Entkopplung vergessen und sich darauf verlassen, dass Sie, egal was Sie tun, nicht einfach nur eine Komponente ausknipsen und eine andere an ihrer Stelle schlagen können, es sei denn, Sie verpflichten sich zu sehr einfachen Protokollen wie HTTP (und sogar dann.)

Wir Menschen, nach allem, nur Loove Standards. Deshalb haben wir ... nun, vergiss es.

0

Wenn die Komponenten 100% orthogonal sind, sollte es möglich sein. Eine klare Trennung der Anliegen kann dies erreichen. Alles, was eine Komponente wissen muss, ist die Schnittstelle ihrer Eingabe.

Die Kopplung sollte einseitig gerichtet sein: Komponenten kennen die Semantik ihrer Parameter, sollten aber voneinander unabhängig sein.

Sobald man 1% Kopplung zwischen Komponenten haben, startet die 1% (in einem System, das ein wenig länger dauert) wachsenden

jedoch oft Wissen in peer Komponenten injiziert wird, eine höhere Leistung zu erzielen.

0

Auch wenn zwei Komponenten nicht direkt miteinander kommunizieren, ist die dritte Komponente, die die anderen beiden Komponenten verwendet, Teil des Systems und ist mit ihnen gekoppelt.

@Vadmyst: Wenn Ihre Komponenten über das Netzwerk kommunizieren, müssen sie eine Art Protokoll verwenden, das mit der Schnittstelle zweier lokaler Komponenten identisch ist.

0

Das ist eine schmerzlich abstrakte Frage zu beantworten.Wenn es sich bei dem System um die Komponenten einer einzelnen Anwendung handelt, gibt es verschiedene Techniken, z. B. MVC (Model View Controller) und Schnittstellen für IoC/Dependency Injection, die die Entkopplung von Komponenten erleichtern.

Aus der Perspektive physikalisch isolierter Softwarearchitekturen unterstützen CORBA und COM lokale oder vernetzte Interoperabilität und verwenden eine "gemeinsame Sprache" von Dingen wie ATL. Diese wurden von XML-Services wie SOAP, die WSDL zum Ausführen der Kopplung verwendet, nicht mehr verwendet. Es gibt nichts, was einen SOAP-Client davon abhält, eine WSDL für die späte Laufzeitkopplung zu verwenden, obwohl ich es selten sehe. Dann gibt es Dinge wie JSON, das ist wie XML, aber optimiert, und Google Protocol Buffers, das das Interop optimiert, aber typischerweise vorkompiliert und nicht spät gekoppelt ist.

Wenn es um IPC (Interprozesskommunikation) geht, müssen zwei Systeme nur ein gemeinsames "Protokoll" sprechen. Dies könnte XML sein, es könnte eine gemeinsame Klassenbibliothek sein, oder es könnte etwas Eigenes sein. Selbst auf proprietärer Ebene sind Sie immer noch durch Speicher-Streams, TCP/IP-Netzwerk, gemeinsame Datei (Speicher oder Festplatte) oder einen anderen Mechanismus "gekoppelt" und Sie verwenden immer noch Bytes und schließlich 1 und 0.

So letztlich kann die Frage wirklich nicht fair beantwortet werden; Genau genommen wird 100% nur von Systemen erreicht, die miteinander zu tun haben. Verfeinern Sie Ihre Frage auf einen Kontext.

0

Es ist wichtig, zwischen direkten und indirekten Komponenten zu unterscheiden. Versuchen Sie, direkte Verbindungen zu entfernen (eine Klasse, die auf eine andere verweist) und stattdessen indirekte Verbindungen zu verwenden. Bindet zwei "ignorante" Klassen mit einer dritten, die ihre Interaktionen verwaltet.

Dies wäre etwa eine Gruppe von Benutzersteuerelementen, die auf einem Formular oder einem Pool von Datenbankverbindungen und einer Verbindungsspooling-Klasse sitzen. Die grundlegenderen Komponenten (Steuerelemente und Verbindungen) werden vom höheren Teil (Formular- und Verbindungspool) verwaltet, aber keine grundlegende Komponente kennt eine andere Komponente. Die grundlegenden Komponenten legen Ereignisse und Methoden offen, und das andere Stück "zieht die Fäden".

0

Nein, können wir nicht. Lesen Sie Joels ausgezeichneten Artikel The Laws of Leaky Abstraction, es ist ein Augenöffner für viele Menschen. Dies ist jedoch nicht unbedingt eine schlechte Sache, es ist einfach. Leere Abstraktionen bieten große Chancen, da sie die zugrunde liegende Plattform ausnutzbar machen.

0

Denken Sie an die API sehr hart für eine sehr lange Zeit, dann stellen Sie sicher, dass es so klein ist, wie es nur sein kann, bis es an der Stelle ist, wo es fast verschwunden ist ...

Die Lego Software Process dies vorschlägt. .. :) - und eigentlich ganz gut gelingt das ...

Wie "eng gekoppelt" sind zwei Zellen eines Organismus ...?

Die Zellen in einem Organismus noch kommunizieren kann, sondern statt es mit allen Mitteln zu tun, die keine Kenntnis über den Empfang (oder das Senden) Teil erfordern, tun sie es durch Chemikalien in den Körper ... Loslassen;)

Verwandte Themen