Was ist der Unterschied zwischen der Verwendung cfinvoke-und createObject ausführen, um eine Komponente Funktion?
In meiner Firma ist der code, den ich Häufig gesehen habe-Komponente-Dateien, die von der Initialisierung ein Objekt der Komponente und rufen Sie die Methoden von dem Objekt. Allerdings scheint es mir etwas einfacher zu verwenden, das cfinvoke-Methode, vor allem wenn nur mit einer Methode aus der component-Datei. Was sind die Unterschiede zwischen diesen 2 Methoden zum aufrufen einer Komponente Funktion und was sind die vor - /Nachteile der einzelnen? Wann sollte ich welche?
Du musst angemeldet sein, um einen Kommentar abzugeben.
cfinvoke kann nur verwendet werden, tags.
createObject kann verwendet werden in sowohl tags als & cfscript und neigt dazu, ein bisschen schlanker /leichter zu Lesen, IMO.
Bis vor kurzem vermied ich mit cfinvoke, denn ich fand es "sperrig", aber ein pro ist es Ihnen, dynamisch in Schleife über die Methoden in einer CFC. In createobject können Sie nicht.
Also, wenn ich zum Beispiel hab von CFC die die Methoden - methode1, methode2, Methode3, method4. Ich kann Schleife über Sie, etwa so:-
--
Andere Sache zu beachten ist, dass einige sharing-hosts sperren auf createobject. Vor allem, weil der Zugang es gibt, um die Unterstreichung Java.
Einen anderen Vorteil der Verwendung von
createObject()
ist, dass man die Ketteinit()
Methode, z.B.Und wenn Ihr
init()
zurückthis
Sie können weiter gehen und die Kette der Methode, wenn Sie nicht brauchen, um das Objekt wieder:Es ist erwähnenswert, dass in der CF-9 können Sie die neue (ähem)
new
syntax zum erstellen von Objekten. Zum Beispiel erstellen das gleiche Objekt wie vor und nennen es sinit()
ich schreiben kann:Es ist sauber und ich mag die option, dies zu tun. VGL bewegt sich in die richtige Richtung meiner Meinung nach mit features wie dieses.
Haben Sie fast beantwortet es selbst: auf der Oberfläche, man könnte sagen, dass, wenn Sie den Aufruf einer einzigen Methode auf einer Seite, dann auf einen Schlag CFINVOKE (welches instanziiert wird, FCKW-und ruft eine benannte Methode) Sinn machen. Und sicherlich, wenn Sie nennen würde, mehr als eine Methode der CFC auf eine Seite, dann die Trennung der Schritte Sinn macht (instanziieren der CFC mit der createobject-Funktion oder cfobject-tag, dann rufen Sie Methoden, wie Sie in das Objekt, ein Zeiger auf das CFC), so dass Sie nicht zahlen, die Instanziierung Kosten mehr als einmal.
Aber Bedenken Sie, dass, wenn die Seite oft aufgerufen, kann es Sinn machen, auch zu speichern, das Ergebnis der Instanziierung des CFC, so dass es wiederverwendet werden kann, auf eine weitere Anfrage zu der Seite. Sie würde tun, dass es durch Speicherung (Ergebnis von cfobject/createobject) nicht in einer lokalen Variablen, sondern in einem gemeinsamen Rahmen: ob server, Anwendung oder Sitzung, basierend auf "wer" würde profitieren von einer solchen Wiederverwendung. Natürlich ist es dann Pflicht, Sie programmgesteuert zu behandeln/zu entscheiden, wie lange Sie das in den "Cache" - FCKW-Instanz.
Als wichtig, wenn Sie sparen Sie eine CFC-Instanz diese Weise werden Sie mehr empfänglich für die "var-scope-bug", das ist im Grunde, dass Sie brauchen, um noch vorsichtiger zu VAR lokalen Variablen, die Sie erstellen, in der CFC. Anstatt zu versuchen, dies näher auszuführen, ich werde darauf hinweisen, eine meta-Ressource, die ich erstellt dass:
http://www.carehart.org/blog/client/index.cfm/2010/3/4/resources_on_the_var_scope_problem
Hoffe, das hilft.
Dann lieber Neuauflage dieser Diskussion werde ich nur den Hinweis auf Google:
http://www.google.com/search?q=cfinvoke+vs+createobject
Gibt es einige subtile Unterschiede (SPRICH:
<cfinvoke>
ist in der Lage Umgang mit dynamischer Methodennamen) aber im wesentlichen nur darauf an, persönliche Vorlieben. Nun, das und die Tatsache, dass Sie nicht verwenden können<cfinvoke>
über<cfscript>
.