DDD/Hexagonal アーキテクチャ アプリケーションの構築を開始してからしばらく経ちましたが、両方に関連する概念の量に圧倒されました。
私は少し行き始めましたが、必要に応じて概念を適用しようとしました。アプリケーションに適用できない、または考えていないものがまだたくさんあることがわかりました。そのうちのいくつかは、アダプター、コマンド (CQRS?)、イベント..
これとは別に、Hexagonal Architecture に関係することに少し行き詰まりました。外部の動作の定義を適用しようとしているのは、内部に依存する必要があるため、インフラストラクチャ層 -> アプリケーション層 -> ドメイン層
私の場合、次の LoginService の例として、アプリケーション層でサービスを定義しました。
class LoginUserService implements ApplicationServiceInterface
{
private $userRepository;
private $session;
public function __construct(UserRepositoryInterface $userRepository, Session $session)
{
$this->userRepository = $userRepository;
$this->session = $session;
}
public function execute($request = null)
{
// TODO: Implement execute() method.
$userName = $request->get('user');
$password = $request->get('password');
$user = $this->userRepository->findByUsername($userName);
if (!empty($user) && $user->validate($password)) {
$this->session->start();
$this->session->set('user', array('id' => $user->getUserId(), 'username' => $user->getName(), 'email' => $user->getEmail()));
return true;
} else {
return false;
}
}
}
しかし、六角形のアーキテクチャが表す依存関係ステートメントを吹き飛ばしていると確信しています。私のアプリケーション層はインフラストラクチャ層に依存しているため。(この場合、$this->userRepository->findByUsername($userName);
アプリケーションの serviceContainer に注入された DoctrineUserRepository の一部です)
私のレポは github で完全に利用できます: Malendar リポジトリ
データベース出力に依存するこの Service ケースをどのように処理しますか? また、使用するのに非常に便利な概念をスキップしますか?
よろしくお願いします=D