Natural Order of Refactoring Explored Part 2: Compose Method

Table of Contents

Compose Method

Analyzing methods, such as the one presented in Part 1, often leads us to understand the main points of the algorithm contained in them. This insight paves the way for the next step: try to split a large method into smaller steps by extracting them into separate methods (refactoring using the Extract Method). Thus, the original method will consist of a sequence of calls to these new methods. With the right naming conventions, you can achieve code that reads like a book.

While doing this, it is also worth cleaning up a bit, especially regarding enigmatic names. Below you will find an example.

public class TextObfuscator
{
    // ...
    public string Obfuscate(string text)
    {
        String result = ChangeWordsOrderRandomly(text);
        result = AddMeaninglessWordsRandomly(result);
        result = RemoveSeparators(result);
        result = AddSeparatorsRandomly(result);
        result = ReplacePolishCharactersWithNonPolishCharacters(result);
        result = ReplaceUpperAndLowerCharactersRandomly(result);
        result = RemoveSpaces(result);
        return result;
    }
    public String RemoveSpaces(String text)
    {
        return text.Replace(" ", "");
    }

    public String RemoveSeparators(String text)
    {
        return Regex.Replace(text, SEPARATORS_REGEX, "", RegexOptions.CultureInvariant);
    }

    public String ReplacePolishCharactersWithNonPolishCharacters(String text)
    {
        return text
                .Replace("ą", "a")
                .Replace("ł", "l")
                .Replace("ę", "e")
                .Replace("ń", "n")
                .Replace("ż", "z")
                .Replace("ź", "z")
                .Replace("ó", "o")
                .Replace("ś", "s")
                .Replace("ć", "c")
                .Replace("Ą", "A")
                .Replace("Ł", "L")
                .Replace("Ę", "E")
                .Replace("Ń", "N")
                .Replace("Ż", "Z")
                .Replace("Ź", "Z")
                .Replace("Ó", "O")
                .Replace("Ś", "S");
    }

    public String ReplaceUpperAndLowerCharactersRandomly(String text)
    {
        String result = "";
        char[] textArray = text.ToCharArray();

        foreach (char currentCharacter in textArray)
        {
            if (ShouldBeUpperAndLowerReplaced())
            {
                result += ReplaceLowerAndUpper(currentCharacter);
            }
            else
            {
                result += currentCharacter;
            }
        }

        return result;
    }
    // ...
}

(Text translated and moved from original old blog automatically by AI. May contain inaccuracies.)

Related Posts

JUG Łódź

JUG Łódź

Things moved very quickly. The first announcement was made on jdn.pl, followed by a discussion list on http://groups.google.com/group/lodz-jug?hl=pl. The incredible response from Java fans in Łódź, as well as at Javarsovia, led to the first meeting of people interested in developing the JUG in Łódź, which took place on Saturday, June 7, 2008, at 4:00 PM. I commend everyone for this effort. I am hopeful and confident that this initiative will grow into a dynamic and cooperative group of individuals.

Read More

Effective Understanding of a Topic

This time, the topic slightly ventures beyond IT projects. Recently, I’ve been doing a lot of research work where I need to construct a coherent extract of practical information from a multitude of knowledge sources. After extensive work in this area, I’d like to share a few tips that I’ve had the chance to apply multiple times.

Read More