Представим, что я покупатель. Взаимодействую с кассиром. В реальной жизни интерфейс для взаимодействия с кассиром выглядит примерно так:
interface Cashier
{
public function calculateCostOfBasketGoods(Basket $basket): float;
public function acceptPayment(Money $sum): CheckAndChange;
}
Я, как покупатель, во время взаимодействия с кассиром не передаю ему сканер штрих-кодов, кассу и pos-терминал в момент взаимодействия ним. Я передаю ему корзину товаров, он озвучивает мне её стоимость. Я передаю ему деньги - он выдает мне чек и сдачу.
По логике из статьи, в метод calculateCostOfBasketGoods мне, как покупателю, по хорошему бы ещё передать сканер штрих-кодов. А в момент передачи суммы для оплаты - еще и кассовый аппарат или, в зависимости от метода оплаты - pos-терминал или QR-генератор.
Как-то криво на этот кейс ложится пример из статьи. По идее, у кассира все зависимости должны быть внедрены ещё до того, как он начнет обслуживать покупателей...