Injectables vs. Newables

Injectables vs. Newables

Injectable Violation

<?php class Warehouse { private $productRepository; public function __construct(ProductRepository $productRepository) { $this->productRepository = $productRepository; } public function pickItem($id, $count) { // ... } } <?php class Warehouse { private $productRepository; private $pickedItems = []; // ... public function pickItem($id, $count) { $productDetails = $this->productRepository->find($id); $this->pickedItems[] = new Pick($productDetails, $count); } public function getPicks() { return $this->pickedItems; } } <?php class Warehouse { private $productRepository; public function pickItem($id, $count) { $productDetails = $this->productRepository->find($id); return new Pick($productDetails, $count); } } // ... $picks[] = $warehouse->pickItem(23, 5); $pickCollection = new PickCollection(); // ... $pickCollection->add($warehouse->pickItem(23, 5));

Newable Violation

class ProductDetails { private $title; private $availableInCountries = []; // ... public function getTitle() { return $this->title; } public function isAvailableIn($countryCode) { return in_array($countryCode, $this->availableInCountries); } } class ProductDetails { // ... public function __construct(DatabaseConnection $connection /* ... */) { $this->connection = $connection; } public funtcion save() { // ... prepare SQL ... $statement = $this->connection->prepare($sql); // ... bind parameters ... $statement->execute(); } } class CodeDetailsRepository { public function __construct(DatabaseConnection $connection /* ... */) { $this->connection = $connection; } public funtcion save(ProductDetails $product) { // ... prepare SQL ... $statement = $this->connection->prepare($sql); // ... bind parameters ... $statement->execute(); } }

Bottom Line

Comments

Popular posts from this blog

A Tailwind CSS Preset for Laravel 5.5

Short and safe array iteration

PHPStorm's performance