【发布时间】:2015-11-06 13:40:41
【问题描述】:
自从我开始构建我的 DDD/Hexagonal 架构应用程序以来已经有一段时间了,我对与它们相关的大量概念感到不知所措。
尽管当我发现有必要时,我开始稍微尝试并尝试应用概念。我发现仍然有很多我不能甚至不想应用到我的应用程序中,其中一些是:适配器、命令(CQRS?)、事件..
除此之外,我对与 Hexagonal Architecture 相关的一些事情有些困惑。 我正在尝试应用外部行为的定义应该依赖于内部,所以 Infrastructure Layer -> Application Layer -> Domain Layer
在我的例子中,我在 Application Layer 中定义了 Services 作为 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;
}
}
}
但是,我很确定我在吹嘘 hexagonal architecture 所代表的依赖声明。因为我的应用层依赖于基础设施层。
(在这种情况下,$this->userRepository->findByUsername($userName); 是注入到应用程序的 serviceContainer 中的 DoctrineUserRepository 的一部分)
我的 repo 在 github 上完全可用:Malendar Repository
如何处理这个依赖于数据库输出的服务案例? 另外,我跳过哪些概念会很好用?
先谢谢你=D
【问题讨论】:
-
你应该在Codereview site问这个问题。
-
谢谢@mTorres 下次我知道该去哪里了:)
标签: php domain-driven-design silex hexagonal-architecture