String manipulation kata implementation
Since I wrote a simple kata to run an experiment, I implemented a solution. Lets look at the outcome.
A simple experiment with, what I think, is an elegant solution. I won't go into the details of all the capitalisation code, I think anybody could invent something like that. This kata revolves around the infrastructure, how the requests are routed to the right capitalisation code. Just know that all capitalisation code is behind an interface ICapitaliser
with one method string Capitalise(Command command);
.
The first thing I did was import the CommandLine package, which is basically a mediator. Instead of naming it options, I called it commands. The base command is very simple:
public abstract class Command
{
[Option('t', "text", Required = true, HelpText = "The text to capitalize.")]
public string Text { get; set; }
}
So the text to capitalise will be in every command. Then I have an array of specific commands for every capitalisation option.
[Verb("lower", HelpText = "All letters to lowercase.")]
public class AllLowerCaseCommand : Command { }
This is the whole specific command. Simple experiment, simple and elegant commands.
The easiest method would be to process the command in the MapResult
function of the CommandLine package. I choose to initialise the ICapitaliser
in the MapResult
function and return the command.
Originally, the initialisation of the different ICapitaliser
was a bunch of if statements after another. I just updated this to use a Dictionary<Type, ICapitaliser>
where the Type
is the type of the Command
and the ICapitaliser
is an instance that will properly process the corresponding command.
Are there other ways to do this: yes, but I like the way I solved it. If you solve this kata in another way, do let me know. My contact details are at the top of the page or check out my contact page.
Edit: apparently I forgot the code.