Frage

Was ist ein Proxy-Objekt in der Inversion of Control / Aspect-Oriented Sinn?

Jeden guten Artikel auf, was ein Proxy-Objekt ist?
Warum würden Sie wollen ein benutzen?
Und wie man in C # schreiben?

War es hilfreich?

Lösung

Im Allgemeinen ist ein Proxy-Objekt ist ein Objekt (Instanz einer Klasse), die genau die gleiche öffentliche Schnittstelle als „echte Klasse“ macht, sondern einfach leitet alle an ihre Mitglieder auf die andere echte Klasse Anrufe. Proxy-Objekte werden für eine Vielzahl von Gründen verwendet ...

Ein Ziel ist es, „so tun, als“ die wirkliche Klasse zu sein, so eine Client-Komponente (oder Objekt) kann „glauben“ an die „reale“ Objekt spricht, aber innerhalb des Proxy, andere Sachen, (wie Protokollierung, Transaktionsunterstützung usw.) zur gleichen Zeit getan wird ... Zweitens kann ein Proxy in comparson auf das reale Objekt sehr billig sein ,. und werden häufig verwendet, so dass die realen Objekte konserviert werden können (ausgeschaltet oder auf einen Pool freigegeben von anderen Clients verwendet werden), wenn der Client nicht verwenden ... Der Proxy bleibt „lebendig“ und der Kunde denkt, dass es nach wie vor hat eine Verbindung zum realen Objekt, aber wenn es das Objekt „nennt“, wird die Proxy tatsächlich aufruf, die und bekommen nur ein weiteres reales Objekt geht um den Anruf zu handhaben, und gibt dann das reale Objekt, wenn der Anruf erfolgt.

Inversion of Control (IOC) .. Das bezieht sich auf ein gemeinsames Muster (auch als Dependency Injection bezeichnet), in dem abhängigen Objekte innerhalb der Klasse "injiziert" werden in eine Instanz die Klasse, von der Client-Code, zu steuern, welche Version eines abhängigen Objekts wird die Instanz verwendet ... IOC ein „Proxy“ verwendet werden kann, in ein Klassenobjekt zu injizieren, wo er denkt, dass es das reale Objekt wird mit ... die Phrase Inversion of Control verweist auf die Tatsache, dass, wenn dieses Muster verwendet, da die Entscheidung, auf die tatsächliche Umsetzung genannt wird, ist nicht mehr unter der Kontrolle der Klasse der den Anruf tätigt, sondern an den Kunden dieser Klasse, wenn es einspritzt eine Instanz eines abhängigen Objekt in die Klasse für diesen Aufruf verwendet werden.

Im Allgemeinen der Begriff IOC mit verwendet wird, was heißt ein IOC Container , die eine Klasse ist speziell für verantwortlich zu sein entworfen zu schaffen Instanzen von abhängigen Klassen basierend auf lose gekoppelte Informationen zu diesen Klassen (Typen) was es wird von einer anderen Quelle als festverdrahtet Abhängigkeiten (meistens aus einer Art von Konfigurationsdatei). Im Allgemeinen, wenn Sie einen IOC-Container verwenden, können Sie eine Instanz davon erstellen, wenn die Anwendung gestartet wird, und dann (von Konfigurationsdaten zu lesen oder was auch immer), Sie „Register“ jede der Klassen (Typen), dass der IOC-Container ist verantwortlich für mit einem Schlüsselwert. Der Schlüssel ist oft die abstrakte Art oder Schnittstelle, die alle Instanzen dieser Anmeldung implementieren müssen). Dann wird in dem normalen Betrieb der Anwendung, in der Sie sonst eine Instanz von einem dieses Typ new'd oben haben könnte, rufen Sie die IOC-Container, und fragen sie für eine Instanz statt, mit dem abstrakten Typ / Schnittstellen als Schlüssel . Der IOC-Container verwendet dann Reflexion oder dynamische Belastung (oder was auch immer), eine Instanz zu schaffen, unabhängig von der Art mit diesem Schlüssel „registriert“ wurde. Auf diese Weise kann einfach durch Konfigurationsdaten ändern, können Sie die tatsächlichen Typen von der Anwendung verwendet steuern, so dass sie in einer Umgebung oder Einsatzstelle von den in einem anderen verwendet zu ändern.

Andere Tipps

Eine sehr gute Ressource über dies ist das alte „Gang of Four“ Design Patterns Buch. Dieses Buch ist sehr nützlich für alle, die Entwicklung objektorientierter Software. Ich verwende persönlich Proxy-Objekte für verzögertes Laden mit NHibernate. Ich habe keine Proxys mit Inversion of Control verwenden, weil ich nur mit meinem IoC verknüpften Arten lösen.

Charles Bretana Erklärung ist sehr gut.

Ich kann die Beziehung zwischen Proxy und AoP vorstellen. Könnte jemand das erklären hier?

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