public bool TryExecuteCommand(string command) { InstructionParser.TryParse(command, out var instruction); switch (instruction) { case DrinkInstruction drinkInstruction: _moneyModule.DrinkOrder = drinkInstruction.DrinkType; if (_beverageQuantityChecker.IsEmpty(drinkInstruction.DrinkType)) { _emailNotifier.NotifyMissingDrink(drinkInstruction.DrinkType); Message = "There is not enough water or milk"; return(false); } Message = _moneyModule.GetOrderTotalMessage(); _moneyModule.RequestMoney(); if (!_moneyModule.IsOrderPaid()) { Message = _moneyModule.GetOrderNotPaidMessage(); return(false); } Drink = GetDrink(drinkInstruction); return(true); case MessageInstruction messageInstruction: Message = GetMessage(messageInstruction); return(true); case ErrorMessageInstruction errorMessageInstruction: Message = ErrorMessage(errorMessageInstruction); return(false); default: return(false); } }