use App\Domain\User\ValueObject\UserName; final class User { private UserName $name; // データとして保持 public function method(): string { $name = new UserName(); // 合成の関係 return "Hello! " . $name->getName(); } }
use App\Domain\User\ValueObject\UserName; final class User { private UserName $name; // データとして保持 public function __construct(UserName $name) { $this->name = $name; } } <?php $name = new UserName(); $user = new User($name); // 集約の関係
Go(ただしGoでは,DIコンテナが黒魔術扱い) ・Google製のWireライブラリ ・Uber製のDigライブラリ <?php use Pimple\Container; use App\Domain\User\Entity\User; use App\Domain\User\ValueObject\UserName; class Container { public function __construct() { $container["user_name"] = function ($container) { return new UserName("Hiroki"); }; // Userへの注入 $container["user"] = function ($container) { return new User($container["user_name"]); }; } }