많은 육각형 건축물을 읽었으며 대부분의 개념을 얻었습니다. (내가 원했을 때) 찾지 못했습니다. 예 해당 아키텍처 유스 케이스 현명한.6 각형 아키텍처 - 간단한 사용 사례
내 응용 프로그램 도메인 모델은 사람들을 취하게 만드는 것이라고 가정 해 봅시다. 전체 비즈니스 로직은 도메인 계층에 상주하는 Person
클래스에 포함됩니다.
class DoctrinePersonRepository implements PersonRepository
{
public function findPersonByName($name)
{
// actual retrieving
}
}
의 난에 액세스하여 사람이 술에 취해 만들고 싶어 가정 해 봅시다 : GET /person/johnDoe/drink
class Person
{
private $name;
private $age;
function __construct($name, $age)
{
$this->age = $age;
$this->name = $name;
}
public function drink()
{
if ($this->age < 18) {
echo $this->name . ' cant drink';
}
echo $this->name . ' drinks tequila';
}
}
도메인 층도에 의해 구현 PersonRepository
이
interface PersonRepository
{
public function findPersonByName($name);
}
이 포함되어 있습니다. 내가 좋아하는 유스 케이스 만들어야합니다
class MakePersonDrinkCase
{
/**
* @var PersonRepository
*/
private $personRepository;
function __construct(PersonRepository $personRepository)
{
$this->personRepository = $personRepository;
}
function makePersonDrunk($name)
{
$person = $this->personRepository->findPersonByName($name);
if ($name) {
throw new \Exception('Person not found');
}
$person->drink();
}
}
을 컨트롤러에서 호출? 이 언급 된 사례가 도메인 계층 또는 응용 프로그램 계층에 있어야합니까? 이 경우 포트 및 어댑터 란 무엇입니까? 이 사람을 취할 방법을 원한다면 - 하나는 GET 요청이고, 다른 하나는 CLI 명령 인 php console person:drink John
입니까? 내 앱을 어떻게 구성해야합니까?
나는 거의 다 왔다고 생각한다. 중요한 것은 18 세가 넘지 않으면 마실 수 없어야한다는 도메인 논리가 도메인 모델 내부에 있고 도메인 모델 외부에 있지 않다는 인식이다. 주변 인프라는 단순히 외부 세계의 명령을 도메인 모델에 대한 명령에 적용하기 위해 존재합니다. – Matt
당신의 예를 사랑하십시오 : DI가 최근 귀하의 질문 중 일부에 답하는 게시물을 작성했습니다. 유용하다고 생각할 수 있습니다. http://jenko.me/ddd/2015/01/23/building-a-house-with-ddd/ – Jenko
어느 정도 그것을 설명하는 또 다른 기사 : http://t.co/U7SZZcvevn – axiac