Возможное решение

У меня получился следующий набор классов:

  • Program – наш корень компоновки, который строит весь граф объектов;
  • Good – описывает товар;
  • Order – описывает заказ;
  • FreeOrder – описывает заказ, за который не нужно платить;
  • Request – описывает запрос к машине;
  • Router – преобразует запрос в команду, а также берёт на себя обязанность формирования заказа;
  • WendingMachine – “помойка”, которая содержит в себе всё, что не захотелось на этом этапе выносить в другие классы. Содержит в себе товары и баланс;
  • ConsoleCommandInput – читает строку с консоли и преобразует её в команду с помощью роутера;
  • Commands:
    • AddMoney;
    • BuyGood;
    • GetChange;
    • ShowCommands;
    • Login;

Есть также у нас чистые абстракции, в виде интерфейсов:

  • IOrder;
  • ICommand;
  • ICommandInput;

Они позволяют нам абстрагироваться во многих частях кода от того, откуда приходит запрос, какой тип заказа у нас и какую команду нужно выполнять.

Если вы нашли ошибку, пожалуйста выделите её и нажмите Ctrl+Enter.


Leave a Reply

Your email address will not be published. Required fields are marked *