I'm sure you've seen your share of long methods—methods that run several
hundred lines.
Some of us may have even written them, probably in those
days before we gained our
wisdom to write better quality code.
Long methods are evil on several grounds:
- They're hard to understand
- They're hard to change
- They're hard to reuse
- They're hard to test
- They have low cohesion
- They may have high coupling
- They ten to be overly complex
Often programmers ask, how "long" is a long method?
A method is too long if
- you have to scroll down to look at the complete method
- it takes several minutes to understand
- you can't easily write an automated test for it
- you can't state the one prominent purpose for the method
One easy way to address long methods is to use the so called Compose Method Pattern.
Your methods then focuses on
doing one thing and invokes other methods, all of which
are at the
same level of abstraction. The result is shorter, easier to understand
methods
in your application.
You say, "OK, I get it, but what about my colleague who has a compulsive disorder to
write very long methods, how do I convince that colleague?"
So you have tried to state the benefits, showed examples, and your
colleague still does not get it.
OK, I can suggest one final drastic
measure.
On a Monday morning, when you go to work, your colleague asks how your
weekend was.
You could say, "It was good, I took the kids to the movie on
Saturday and went to the park
on Sunday." That would be like using compose
method pattern. You have stated your activities
at one level of abstraction.
If your colleague is interested in more details about the movie or the
park, he or she can drill down into the details further asking you how
the movie was, and so on.
But, do not reply to that question that way. Instead say, "Over the
weekend I got into my car, started it,
drove 5 miles West, took a right
turn, then a left turn, then drove another 10 miles, ..." Go at it for
several minutes until your colleague gets frustrated and interrupts you
with "What's wrong with you."
Now simply reply, "oh, I though I'll tell
you how my weekend way like you write your methods."