Less Comments, More Readable Code #2

An entry about refactoring | clean code Publication date 3. July 2009 14:23

In my last post, I refactored some horribly commented code into the following:

public void HighlightPotentialDropNode(
                     UltraTreeNode potentialDropNode, 
                     Point dropLocationRelativeToTree)

{

    DropLinePositionEnum newDropLinePosition = DropLinePositionEnum.OnNode;

 

    if (PointIsAboveNode(potentialDropNode, dropLocationRelativeToTree))

    {

        newDropLinePosition = DropLinePositionEnum.AboveNode;

    }

    else if (PointIsBelowNode(potentialDropNode, dropLocationRelativeToTree))

    {

        newDropLinePosition = DropLinePositionEnum.BelowNode;

    }

 

    DrawDropLinePosition(potentialDropNode, newDropLinePosition);

}

 

private bool PointIsAboveNode(UltraTreeNode node, Point pointInTreeCoords)

{

    return pointInTreeCoords.Y < (node.Bounds.Top + EdgeSensitivity);

}

 

private bool PointIsBelowNode(UltraTreeNode node, Point pointInTreeCoords)

{

    return pointInTreeCoords.Y > ((node.Bounds.Bottom - EdgeSensitivity) - 1);

}

I was a bit quick to publish that post – because 5 minutes later I discovered that I wasn’t quite done cleaning up this method... Can you tell what’s wrong with it? It’s breaking the single responsibility principle.

Let’s do one more ‘extract method’ refactoring on it, putting the logic of calculating the DropLinePosition in a separate method:

public void HighlightPotentialDropNode(
                        UltraTreeNode potentialDropNode, 
                        Point dropLocationRelativeToTree )

{

    DropLinePosition dropLinePosition = 
                CalculateDropLinePosition(potentialDropNode, dropLocationRelativeToTree);

    DrawDropLinePosition(potentialDropNode, dropLinePosition);

}

 

private DropLinePosition CalculateDropLinePosition(
                                   UltraTreeNode potentialDropNode, 
                                   Point dropLocationRelativeToTree)

{

    DropLinePosition dropLinePosition = DropLinePosition.OnNode;

 

    if (DropLocationIsAboveNode(potentialDropNode, dropLocationRelativeToTree))

    {

        dropLinePosition = DropLinePosition.AboveNode;

    }

    else if (DropLocationIsBelowNode(potentialDropNode, dropLocationRelativeToTree))

    {

        dropLinePosition = DropLinePosition.BelowNode;

    }

 

    return dropLinePosition;

}

 

private bool DropLocationIsAboveNode(UltraTreeNode node, Point dropLocationRelativeToTree)

{

    return dropLocationRelativeToTree.Y < (node.Bounds.Top + EdgeSensitivity);

}

 

private bool DropLocationIsBelowNode(UltraTreeNode node, Point dropLocationRelativeToTRee)

{

    return dropLocationRelativeToTRee.Y > ((node.Bounds.Bottom - EdgeSensitivity) - 1);

}

Now we’re talking :)

Currently rated 4.0 by 1 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Comments

Powered by BlogEngine.NET 1.4.5.0

Welcome!

My name is Fredrik Kalseth, and this is my blog - thanks for visiting! I am fortunate enough to work with what I love for a living, and this blog is essentially the biproduct of that.

I work as a senior consultant for Capgemini, and am also an active participant in the Norwegian .NET community, as an avid attendee but also as a speaker (most recently at NNUG and MSDN Live).

As a developer, I have a wide circle of interest. My primary passion is for agile, test-driven development, with focus on best practices and clean code. That said, I also love to work on the frontend, especially with web development.

On Twitter? My handle is fkalseth. On LinkedIn? I`m there too.

NDC 2010

The conference to attend this summer happens June 16th-18th in Oslo, Norway. Are you going? Be sure to catch my talk on AOP while you're there!

 

Disclaimer

This is a personal blog; any opinions expressed here are my own and do not necessarily reflect those of my employer. All content herein is my own original creation, and as such is protected by copyright law. Unless otherwise stated, all source code posted on this blog is freely usable under the Microsoft Permissive License.

What Readers Talk About

Comment RSS