Functional refactoring in Scala
blog.8thlight.com
blog.8thlight.com
That being said, I've always preferred to think in terms of separation of (computational) concerns, something functional programming excels at. And it's often not hard to deforest manually when the time comes.