internal static void Main() { IPhonebookRepository data = new PhonebookRepositoryWithDictionary(); IPrinter printer = new StringBuilderPrinter(); IPhoneNumberSanitizer sanitizer = new PhoneNumberSanitizer(); ICommandFactory commandFactory = new CommandFactoryWithLazyLoading(data, printer, sanitizer); ICommandParser commandParser = new CommandParser(); while (true) { string userInput = Console.ReadLine(); if (userInput == "End" || userInput == null) { break; } var commandInfo = commandParser.Parse(userInput); IPhonebookCommand command = commandFactory.CreateCommand(commandInfo.CommandName, commandInfo.Arguments.Count()); command.Execute(commandInfo.Arguments.ToArray()); } printer.Accept(new ConsolePrinterVisitorWithNewLine()); }