As is pretty obvious, I'm a big fan of good OO design. But I'm
a bigger fan of maintainable apps, and one of my favorite tricks when
evolving apps is what I call the "encapsulated hack."
Take, for
example, a CFC that needs access to an
application-scope variable. What's the right solution?
Package the variable up in such a way that it can be passed to the CFC,
so the CFC doesn't have to break encapsulation by calling the
application-scope variable. Much of the time, that's easy to do,
but not always. When it's not possible, I hack it.
Here's what I'd do:
<cffunction name="getSomeVar" access="private" …>
<!—TODO: encapsulated hack —>
<cfreturn application.someVar />
</cffunction>
"Ick!,"
you say, "that's breaking encapsulation!," and you'd be right.
But notice that I'm breaking encapsulation in exactly one place,
and that place is itself encapsulated. Now, when I do it the right
way, I can change the implementation of this one method, and nothing
else has to change.
Speaking from experience working with a single large
app over several years, I can tell you that this is very helpful in
allowing you to move forward with a good OO design, without having to
do everything
all at once. Just make sure you clearly
indicate that you've got a hack, and that it needs to be fixed.
If you're using CFEclipse, you can use a TODO comment as I have, open
the 'tasks' view, and you'll get a listing of all such todos in your
code.
Comments are closed.