In that code I posted (which probably won't work anyway), there's no editing
of the 3rd party code. he's injecting methods into objects, not literally
modifying code.

best.

marc

On Jan 18, 2008 8:36 AM, Alan Livie <[EMAIL PROTECTED]> wrote:

>
> The problem with this is he would still have to edit the 3rd party code to
> use the new cfc.
>
> If the cfc's are managed by a factory / Coldspring then its less of a
> problem as the change would only need to happen in the factory / coldspring
> xml config file
>
> The new cfc could extend the 3rd party one and polymorphism can be used to
> override the method as suggested below.
>
> If the cfc's are not managed by a factory then 3rd party code would need
> to change to call the new cfc in which case the original cfc may as well be
> changed.
>
> It's not an easy one!
> ________________________________________
> From: [email protected] [EMAIL PROTECTED] On Behalf Of Marc
> Esher [EMAIL PROTECTED]
> Sent: 18 January 2008 13:19
> To: [email protected]
> Subject: [CFCDEV] Re: Running a child method without a parent knowing -
> Can it be done?
>
> this is probably way out there, and it's certainly far more confusing and
> probably less maintainable and overall a bigger pain in the butt than your
> proposed solution, but it's friday so what the hell:
>
> i think you technically could do something like this:
>
> you could have a new component that had these functions:
>
> <cfcomponent hint="something i'm gonna inject">
>
>  <cffunction name="method1">
>     ....args same as original method1's arguments ...
>
>    <cfset originalMethod1(arg1=arg1, arg2=arg2....)>
>
>   <cfset doMyDateStuff()>
>
>  </cffunction>
>
>  <cffunction name="doMyDateStuff">
>     ... do my date stuff here ...
>  </cffunction>
>
>
> </cfcomponent>
>
>
>
> i'm assuming you at least have an instance of the original component
> containing method 1, or access to that component, so:
>
> in your code somewheres:
>
> <cfset myInjector = createObject("component","MyInjector")>
>
>
>
> Now's where it gets weird:
>
> <!--- 'copy' method 1 into a new function --->
> <cfset thirdPartyObject["originalMethod1"] = thirdPartyObject["method1"]>
>
> <!--- override original method 1 with the method1 from your injector --->
> <cfset thirdPartyObject["doMyDateStuff"] = myInjector["doMyDateStuff"]>
> <cfset thirdPartyObject["method1"] = myInjector["method1"]>
>
>
> when method1 is called, it's going to call the original method 1 that you
> created by "copy", then it's going to call your date function.
>
> Now, what I don't know is: A) whether this will work at all. probably not.
>  B) whether when you overwrite method1 it also technically overwrites
> originalMethod1 since originalMethod1 just points to method 1. That's my
> suspicion.
>
> But hey, if you have nothing else to do and want to futz around with
> creating hard to understand, unmaintainable method injection stuff that will
> break whenever ThirdParty releases a new version, it might be fun to at
> least give it a shot.
>
> have a great day.
>
> marc
>
>
>
>
> On Jan 18, 2008 6:47 AM, Clarkee21 <[EMAIL PROTECTED]<mailto:
> [EMAIL PROTECTED]>> wrote:
>
> Hi Marc,
>
> Yeah we did consider that but there was a few twists and turns to that
> solution which would have resulted in us basically rewritting the core
> method as a database script.
>
> I've actually just had a bit of a brainstorm with one of the guys here
> and I think we might have come up with a solution in that we just
> leave the dates and run a scheduled task to wipe any redundant data at
> a later stage.
>
> Cheers,
> James
>
> On Jan 18, 11:30am, "Marc Esher" < [EMAIL PROTECTED]<mailto:
> [EMAIL PROTECTED]>> wrote:
> > I've never heard of anything native in CF for doing this.
> >
> > I'm going to assume that if you're asking this there isn't much use in
> going
> > back to the 3rd party tool creators and asking them to add listener
> hooks.
> >
> > but what about doing it the old fashioned way: putting a trigger on your
> DB
> > that looks for changes from 1 to 0 in that column and then responds
> > appropriately.
> >
> > Best,
> >
> > marc
> >
> > On Jan 18, 2008 6:11 AM, Clarkee21 <[EMAIL PROTECTED]<mailto:
> [EMAIL PROTECTED]>> wrote:
> >
> >
> >
> >
> >
> > > Hi guys,
> >
> > > I'm a bit of an OO newbie so I was wondering if someone on here might
> > > be able to help me find an approach to my problem.
> >
> > > I have two methods -
> > > Method #1 is a core part of a 3rd party open source application we're
> > > running in-house.
> > > Method #2 is part of a plugin I'm developing for this application.
> >
> > > Method #1 is used to simply switch a section of a page on or off. In
> > > other words is sets a DB field "visible" to 0 or 1 depending on the
> > > section's current status.
> >
> > > Method #2 is used to reset two date fields in my table.
> >
> > > What I want to do is somehow have method #2 executed the moment method
> > > #1 has run but, and here is the twist, I don't want to have to rewrite
> > > anything in method #1 or it's object. This is mainly because a) we're
> > > planning to release this back out into the community at a later stage
> > > so I'd rather have it as a single directory of stand-alone files and
> > > b) it would mean we'd have to insert the code into method #1 again and
> > > retest if we ever upgraded.
> >
> > > Is there anyway that method #2 can "listen" for method #1 being
> > > executed without method #1 being aware that there is anything else
> > > going on?
> >
> > > Cheers,
> > > James- Hide quoted text -
> >
> > - Show quoted text -
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CFCDev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cfcdev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to