Monday, May 18, 2009

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."