Frage

Ich sehe eine Menge von IoC-frameworks für .Net und Java.Weiß jemand, warum es keine gleichwertige Rahmenbedingungen für Smalltalk.Dies ist eher eine Philosophie-Frage als alles andere.Ich Frage mich, ob es etwas ist, was in den Smalltalk Weg, Dinge zu tun, die verhindert die Notwendigkeit, ein IoC-framework.

War es hilfreich?

Lösung

MVC erfunden wurde auf Smalltalk, und ist wohl dem original Inversion of Control Rahmen.Zwar etwas leichter als sein java-Pendants, es hat die grundlegenden Konzepte des Modells, die die Daten hält, eine Ansicht Rendern der Daten in Reaktion auf Ereignisse propogated aus einem controller.

Weniger leichthin, Java ist tatsächlich braucht eine Menge framework-Unterstützung zu tun, eine web-Anwendung, ohne übermäßige Mengen an boilerplate-code.Smalltalk unterstützt Programmierung Idiome wie Fortsetzungen, die es ermöglichen, ein Autor zu tun, dass Sie nicht wirklich schreiben, event driven code. Meer wie das funktioniert, was die Vorteile des IoC mit einer etwas flexibler Entwicklungs-Paradigma.

EDIT:MVC ist ein framework für Benutzeroberflächen in Smalltalk (wohl nicht wirklich ein framework als solchen, aber die Klassenbibliothek wurde gebaut in Unterstützung).Es ist die inversion von der Eigenschaft, dass die Ansicht und das Modell reagiert auf Ereignisse ausgelöst werden, die controller - rufen Sie uns nicht an, wir rufen Sie Eigenschaft.Inversion of Control, ein Entwurfsmuster in die Rahmen, die ist verwendet zu reduzieren die Notwendigkeit für umfangreiche boilerplate in java-Anwendungen.In einigen Definitionen wird ein Anwendungs-framework, Inversion of Control ist die wichtigste Eigenschaft, die ist angesehen als die Unterscheidung einen Rahmen aus einer Bibliothek.

Andere Tipps

Funktionen sind Bürger erster Klasse in smalltalk, so ist es einfach, IoC zu haben, ohne einen Rahmen.

Ich denke, das IOC oder das Dependency Injection-Muster ein Problem löst, die nicht wirklich in der Smalltalk-Umgebung vorhanden ist. Smalltalk ist eine nicht typisierte dynamische Sprache und verwendet Nachricht zu kommunizieren, übergeben. Dies macht für Objekte, die von Natur aus in der Sprachebene lose gekoppelt sind. Jedes Objekt kann eine Nachricht an ein anderes Objekt ohne Rücksicht auf die Art senden, solange sie die Nachricht verarbeiten kann. So, wie Sie Abhängigkeiten zu einem bestimmten Zeitpunkt vielleicht erraten Veränderung ist relativ einfach und natürlich. Nur müssen entscheiden, wo, wann und wie Sie die Abhängigkeit ändern möchten.

Einige mögliche Gründe. Eine davon ist, dass wir nicht das „IoC“ Qualifikationsmerkmal zu verwenden gestört, die im Wesentlichen überflüssig ist -. Seit dem Aufruf etwas ein Rahmen für die Umkehrung des Steuerflusses impliziert

Ein weiterer Grund ist, dass die Sprache Smalltalk für „IoC“ Ströme direkte Unterstützung bietet - in Form von Verschlüssen. Ein Ergebnis der Programmierung mit Verschlüssen besteht darin, dass der Ablauf der Steuerung wie in Rahmen miteinander nicht so krass unterschiedlich scheint als ein Gefühl von evozieren ist „invertiert“ von einem „normalen“ Gefühl der Strömung; vielmehr mit Verschlüssen, wird der Ablauf der Steuerung Spiegel hin und her zwischen diesen beiden Perspektiven des ganzen Zeit und überall. Auch innerhalb der einzelnen Aussagen.

Ein dritte Grund ist vielleicht, dass auch ohne Verschlüsse, die „Inversion of Control“ beschrieben wurde, ist nicht eindeutig mit Rahmen verbunden ist -. Die gleichen Flüsse sind in den meisten Formen des Code gefunden, die mich verwickeln / O

Viertens Smalltalker wahrscheinlich diese Art von Strömungen noch mehr als andere verwenden, wie wir stärker auf die Begriffe von Objekten und die Nachrichten zwischen ihnen gesendet lehnen als an den Vorstellungen von Strukturen und Berufung Mitgliederfunktionen. In der Abwesenheit von Schließungen sind diese beiden Ansichten äquivalent und austauschbar, aber die Zugabe von Schließungen ändert das Ergebnis -. Das Gefühl des Steuerflusses in Gebrauch eine der Effekte ist

Schließlich könnte man auch darüber nachdenken, den REPL Stil des Steuerflusses als „einfacher“ zu beschreiben, aber „invertiert“ Sinn des „normalen“ Flusses, normal in dem Sinne, dass es fast überall sonst verwendet wird.

Zusammenfassend bestehen die gleichen Arten von Frameworks für Smalltalk. Wir beschreiben sie ein bisschen anders ist alles. Der Unterschied besteht darin, zumindest teilweise aufgrund des Vorhandenseins und Nutzung von Verschlüssen in Smalltalk, die viele anderen Umgebungen noch nicht zur Verfügung stellen - - insbesondere C ++, C # und Java

.

In Java eine Abhängigkeit erstellt, wenn Sie schreiben so etwas wie

MyClass32 temp = this.theThing ();

Jetzt Ihr Code hängt von der Klasse MyClass32 Sein herum. Ihr Code wird nicht funktionieren ohne es. Jede Änderung in dieser Klasse kann Ihr Code uncompilable, erfordert ein Viele zusätzliche Änderungen im Code, die kann weitere Code-Änderungen in der Klasse hängt von Ihnen. Viel zusätzliche Arbeit.

In Smalltalk würden Sie schreiben   Temp: = Selbst theThing;

Ihr Code wird unabhängig davon arbeiten, was zurückgegeben von #getTheThing. Der Code ist nicht abhängig wobei auf der Klasse MyClass32 um. Deine einzige Abhängigkeit ist, dass ‚Temp‘ müssen verstehen, was auch immer Nachrichten, die Sie versenden.

In einem gewissen Sinn der Zweck der Dependency Injection Frameworks ist eine statisch typisierte Sprache zu machen wie Java arbeiten eher wie ein dy7namically ein getippt.

Das heißt, es ist ein Design-Muster, das ich oft habe gefolgt in Smalltalk: Erstellen Sie eine Klasse-Methode wie MyClass, dass einige Klasse zurückgibt. Es muss nicht haben Der Name 'MyClass'. Es könnte eine von mehreren sein Klassen, eine andere Klasse in der Nacht zurück. Dieses Muster ist in der Smalltalk MVC, wo View-Klassen die Methode #defaultControllerClass haben, die von den Unterklassen der Regel neu definiert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top