it-swarm.com.de

Was ist die Trennung zwischen Politik und Mechanismus?

Der Wikipedia-Artikel über Trennung von Mechanismus und Politik sagt

Die Trennung von Mechanismus und Politik ist ein Gestaltungsprinzip in der Informatik. Darin heißt es, dass Mechanismen (die Teile einer Systemimplementierung, die die Autorisierung von Vorgängen und die Zuweisung von Ressourcen steuern) die Richtlinien nicht diktieren (oder übermäßig einschränken) sollten, nach denen Entscheidungen darüber getroffen werden, welche Vorgänge zu autorisieren und welche Ressourcen zuzuweisen sind .

  1. Was ist der Unterschied zwischen dem Entwurfsprinzip der Trennung von Mechanismus und Politik und dem Prinzip der Trennung von Schnittstelle und Implementierung (wie in SOLID)?

  2. Ist eine Richtlinie eine Schnittstelle?

  3. Ist ein Mechanismus eine Umsetzung einer Politik?

  4. Was wird im Laufe der Zeit, der Politik, des Mechanismus oder beider häufiger geändert?

  5. Ist das Prinzip der Trennung von Politik und Mechanismus so, dass sich Politik und Mechanismus unabhängig voneinander ändern können? (Die Trennung von Schnittstelle und Implementierung ermöglicht Änderungen an der Implementierung, ohne die Schnittstelle und damit den Client zu beeinflussen.)

12
Tim

Was ist der Unterschied zwischen dem Entwurfsprinzip der Trennung von Mechanismus und Politik und dem Prinzip der Trennung von Schnittstelle und Implementierung?

Sie haben nichts miteinander zu tun, daher ist es schwierig zu beschreiben, was der Unterschied zwischen ihnen ist.

Die Trennung von Schnittstelle und Implementierung lautet "Ich muss nicht wissen, wie das Auto funktioniert, um es zu fahren". Wenn Sie wissen, wie man ein gasbetriebenes Schrägheck mit Frontantrieb fährt, und Sie aufgefordert werden, ein elektrisches Coupé mit Hinterradantrieb zu fahren, können die Leistungsmerkmale anders sein als Sie es gewohnt sind, aber grundsätzlich verwenden Sie im Wesentlichen das Das gleiche Lenkrad und die gleichen Pedale und Lichtschalter und so weiter, um beide Fahrzeuge zu bedienen, obwohl ihre Implementierungsdetails völlig unterschiedlich sind. Sie bemerken den Unterschied nur, wenn Sie Interaktionen mit dem Fahrzeug haben, die Implementierungsabhängigkeiten aufweisen, wie z. B. das Auftanken.

Die Trennung des Mechanismus von der Richtlinie besteht darin, dass das Auto so gebaut ist, dass es in jede Richtung, in die es zeigt, bis zu 100 Meilen pro Stunde fährt, und der Fahrer ist dafür verantwortlich, den richtigen Weg auf der Autobahn auf der richtigen Spur zu fahren mit der richtigen Geschwindigkeit, nicht das Auto. Die Richtlinien bezüglich der Geschwindigkeitsbegrenzung und wann Sie nach links abbiegen dürfen, sind nicht in den Motor eingebettet, es sei denn, die Motoren wurden von Personen entwickelt, die wussten, welche wahrscheinlichen Richtlinien in Kraft treten würden.

Jetzt fragen Sie sich vielleicht, was passiert, wenn Autos selbstfahrend werden, und die Antwort lautet: Wir behalten weiterhin die Trennung zwischen Richtlinien und Mechanismen bei der Entwicklung der Software bei. Die Entscheidungen darüber, wann gebremst und wann beschleunigt werden soll, werden getroffen, indem sie in einen Richtliniencode codiert werden, der die exekutive Kontrolle über die Subsysteme hat, die das Auto lenken, die Bremsen betätigen usw. Diese Mechanismus-Subsysteme kennen oder kümmern sich nicht um Richtlinien. Sie tun einfach das, was ihnen gesagt wird.

Ich bin fest davon überzeugt, dass sich der Mechanismuscode vom Richtliniencode unterscheidet. Hier ist eine andere Möglichkeit, darüber nachzudenken: Richtliniencode beschreibt, was der Code tut auf der Ebene der Geschäftsdomäne. "Erstellen Sie eine sortierte Liste der Nachnamen aller unserer Kunden in London" ist im Geschäftsbereich. "Diese beiden nicht in der richtigen Reihenfolge befindlichen Elemente in diesem Array austauschen" befindet sich in der Mechanismusdomäne. Die Mechanismusdomäne implementiert die Richtlinie, aber sie codiert die Richtlinie nicht. Es codiert Fakten über Array-Elemente, nicht über Kunden-Mailinglisten. Wenn Code den Mechanismus und die Richtliniendomänen mischt, wird es schwieriger, darüber nachzudenken und zu warten.

37
Eric Lippert

Das Konzept der Trennung zwischen Politik und Mechanismus ist völlig orthogonal zur Idee von Schnittstelle und Implementierung. Nehmen wir eine Analogie:

Stellen Sie sich einen Henker vor, der eine Kapuze mit einer großen Axt trägt. Seine Aufgabe ist es, die Köpfe abzuhacken. Aber wessen Köpfe genau? Das liegt an der Königin. In dieser Analogie ist der Henker der Mechanismus, die Königin legt die Richtlinie fest. Der Henker entscheidet nicht, wer hingerichtet wird.

Die Schnittstelle dafür ist nun, dass die Königin ihre Entscheidung irgendwie bekannt gibt. Vielleicht ruft sie "mit seinem Kopf weg!". Das ist die Schnittstelle. Dann gibt es einen Prozess, bei dem jemand den Henker findet und ihn mit dem Unglücklichen zusammenbringt, um die Tat zu tun. Das ist die Implementierung.

Um Politik gegen Mechanismus zusammenzufassen, muss der Teil des Systems, der für das Treffen von Entscheidungen verantwortlich ist, von dem Teil getrennt werden, der sie durchsetzt. Bei Schnittstelle oder Implementierung geht es darum, die Art und Weise, wie Teile des Systems miteinander kommunizieren, davon zu trennen, wie sie auf Nachrichten von anderen Teilen des Systems reagieren.

12
JimmyJames

Mechanismen müssen notwendigerweise unter der Kontrolle von Personen mit beträchtlichem Programmier- oder Systemwissen stehen, während die Politik von Personen kontrolliert werden sollte, die über kein solches Fachwissen verfügen.

1
supercat