문제

내가 하려고 별도의 내 DAL 내에서 사업 층을,그리고 그렇게 하기로 결정했을 뿐 아니라 그 기술이 어떤 ActiveRecord 접근 방식 및 이동에 대한 유사 여 접근 방식이다.다시 말해서,내 도메인을 개체 걸리지 않을 것이라고의 지속다.에서 이렇게 정말 유용하고 편리하게 잠식에서"빈혈 도메인 모델은"안티-패턴이다.예를 들어,하나의 엔티티에서 내 프로그램은 조직이다.

조직으로 표현 무언가 이것을 좋아한다:

class Organization {
    private $orgId;
    private $orgName;

    // getters and setters
}

그래서 기본적으로 이 조직은 아무것도하지 않는 다른 행동으로"부대"(로 Martin Fowler 말한다)일부에 대한 데이터이다.PHP 세계는 아무것보다 더 영화롭게 배열입니다.로 행동이 연결되어 있습니다.

과 행동에서 산의 샘을 찾아가 직접 시음하길 권유했을 고집에서"서비스 수준이다"등과 같은 OrganizationService 는 주로 제공이 중개인으로 이러한 개체고 DAL.

다른 잠재적인 확장 문제와 PHP(내가 다른 이유는 내가 주장은"자루에 넣기"내 데이터에서 이러한 객체)이 접근은 완전히 떨어져?

당신은 어떻게 처리하는 도메인 모델에서 이러한 상황?아마도는 조직의 일부가 아닌 내 도메인에서 첫 번째 장소는?

도움이 되었습니까?

해결책

만,그것은 다음과 같이 처음에는,그러나 때 당신은 리팩터 코드,당신은 몇 가지 동작에 대한 조직 클래스...

하나의 예에는 나의 생각은 지금 사람이 있는 경우(직원)할 수 있습으로 연결하 조직입니다.그래서,당신은 있을 수 있습 방법 AssociateEmployee(User employee) 는 찾을 수 있습니다 그 곳에서 당신의 조직 클래스입니다.

거나 변경할 수 있습의 위치,회사를 대신의 매개변수 설정을 다음과 같은 주소,도시,국가,세 단계에서 추가할 수 있습니다 ChangeLocation(Street, City, State) 다.

그냥 단계적으로 이동이 발생할 경우,일부 코드에 당신 BL/서비스 층을 관리하는 데 도움이 속해야 도메인으로 이동,아래하는 도메인입니다.당신이 읽으면 파울러,당신은 그것을 얻을 것이 매우 빨리 당신이 볼 때에 그것을 당신의 코드입니다.

다른 팁

이제 단지 빈혈 일 수 있습니까?

예를 들어, 회의/회의 등록 사이트를 개발하고있었습니다. 단 하나의 회의로 시작했습니다.

여전히 회의 수업과 하나의 사례 만 있었지만 내년에 우리는 회의를 열었고, 그것은 확장되었고 새로운 부동산이 추가되었습니다 (두 번의 연속 회의를 개최하기 위해). 아직 완전히 개발되지 않았습니다. 그런 다음 여러 회의를 포함 할 수있는 회의 그룹을 추가했습니다.

따라서 도메인이 시간이 지남에 따라 변하고 모델이 재현 될 수 있다는 점을 명심하는 것이 중요하다고 생각합니다. 따라서 빈혈이라고 생각하더라도 너무 미래 지향적 일 수 있습니다 (조직 수업이 시작될 것입니다. 설정, 규칙 또는 선호도 또는 무언가를 얻으십시오).

비즈니스 규칙이 많지 않거나 도메인이 그렇게 복잡하지 않으면 DDD가 너무 많은 오버 헤드 일 수 있다고 생각할 수도 있습니다. DDD는 크고 복잡한 도메인에 대한 훌륭한 솔루션이지만 단순히 데이터를 데이터에서 수행하는 경우 많은 오버 헤드와 복잡성입니다. DDD는 설계하기가 더 어렵고 본질적으로 복잡성을 추가하므로 정당화하기 위해 문제 영역의 복잡성이이를 능가해야합니다.

그게 내가 Zappan과 Epitka에 추가 할 전부입니다.

당신은 당신이 시작하기 위해 거기에 있어야하는 reposnsibility를 복용하고 있기 때문에 당신의 실체는 빈혈이 아닙니다. 지속 및 가져 오기 엔티티는 리포지토리의 반복성입니다. 실제로 귀하의 행동은 서비스 계층이 아닌 엔티티에 있어야합니다. 그러나 간단한 대답을 넘어서 어디로 가는지 설명합니다. Eric Evans의 DDD는 좋은 출발점입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top