Пишем код, кода становится много, его нужно обслуживать и бороться со сложностью, также нужно тщательно тестировать, тк деньги и надежность пользователей
↓
Чтобы тестировать методы класса и не зависеть от реализации -- соблюдается принцип инверсии зависимостей (и некоторые другие)
↓
Инверсия зависимостей -- нужно помнить и держать зависимости к нашему классу где-то и сам конкретный сервис наполнять нужно этими зависимостями, руками делать это
накладноtry {
echo
(new PurchaseOrder(
new LocalOrderStorage(
new NullOrderStorage()
),
new OrderId($inputParams['order_id'])
))
->newInvoice(
new InvoiceNumber(
new Vendor(
new LocalVendorStorage(),
new VendorId($inputParams['vendor_id'])
),
new VendorInvoiceNumber($inputParams['vendor_invoice_number']),
new DateTime($inputParams['date_time'])
),
new VendorInvoiceNumber($inputParams['vendor_invoice_number']),
new DateTime($inputParams['date_time']),
new InvoiceAmount(
new Amount($inputParams['amount']),
new Currency($inputParams['currency'])
)
)
->json()
;
} catch (Exception $exception) {
return
(new ErrorResult())
->json($exception->getCode(), $exception->getMessage())
;
}
Кроме того появляется куча параметров в проекте.
↓
На помощь приходит паттерн Dependency Injection Container (Service Container), который за нас это делает и всасывает в себя эту заботу, а мы продолжаем писать код и делать это быстро, доставляя features for customers