main
 1using System;
 2using System.Linq;
 3using mars.rover.common;
 4using mars.rover.domain;
 5using mars.rover.presentation.model;
 6
 7namespace mars.rover.service.application
 8{
 9    public class DeployRoverCommand : ParameterizedCommand<string>
10    {
11        readonly Registry<HeadingFactory> factories;
12        readonly NASA nasa;
13
14        public DeployRoverCommand(Registry<HeadingFactory> factories, NASA nasa)
15        {
16            this.factories = factories;
17            this.nasa = nasa;
18        }
19
20        public virtual void run_against(string deployment_coordinates)
21        {
22            var coordinates = deployment_coordinates.Split(new[] {' '});
23            var rover = new Rover(Convert.ToUInt32(coordinates[0]), Convert.ToUInt32(coordinates[1]),
24                                  find_heading_for(coordinates[2]));
25            nasa.deploy(rover);
26        }
27
28        Heading find_heading_for(string heading)
29        {
30            var plateau = nasa.plateau;
31            return factories.First(x => x.is_satisfied_by(heading)).create(plateau);
32        }
33    }
34}