1

저는 도메인 기반 설계를 배우고 있으며 지금은 'naively confident' 단계에 있습니다. DDD (청서)는 집계를위한 공장 패턴을 가지고 있다고 말합니다. 나는 그것을 나의 응용을 위해 사용하려고 시도했다. 그리고 시나리오 중의 1 개에서 그것은 단지 올바르게 보이지 않는다. 그리고 나는 진행하는 방법을 모른다.인수를 팩토리 패턴으로 전달

class CompanyFactory { 
    public Company getCompany(Type type, Long numOfShares) { 
     switch(type) { 
      case PUBLIC: 
       return new PublicCompany(numOfShares); 
      case PRIVATE: 
       return new PrivateCompany(); 
     } 
} 

지금 인수 'numOfShares'PublicCompany 관련이 : 다음은 내 경우입니다. 하지만 내 타입이 일 때, 사용하지 않을지라도 여전히 'numOfShares'을 보내야합니다.

AbstractFactory를 시도했지만 각각의 팩토리는 정확히 한 유형의 객체를 만들고 IMHO는 처음부터 공장을 사용하는 모든 지점을 그리워합니다. 이 작업을 수행하는 방법에 대한 지침은 유용 할 것입니다.

+0

일반적으로 민간 기업은 여러 측면에서 공개 기업과 크게 다르므로 두 가지를 모두 대표하는 하나의 클래스를 사용하는 것이 바람직하지 않습니다. 당신은 장소 곳곳에 많은 if-thens로 끝날 위험이 있습니다. –

답변

2

공장은 복잡한 작성 프로세스를 추상화하거나 클라이언트 코드를 의미가있는 구체적인 구현에서 분리하는 데 주로 유용합니다.

여기서는 프레젠테이션 레이어에서 호출되는 일반 createCompany(String type, Map<String, String> info) 응용 프로그램 서비스 메서드를 구현했을 수 있으므로 해당 유형을 기반으로 올바른 구체적인 회사를 동적으로 인스턴스화해야한다고 가정합니다.

이 유스 케이스가 공장에서 이익을 얻는 것에 동의하지만 어플 리케이션 서비스에서 명시적인 createPublicCompanycreatePrivateCompany 메서드를 정의하여 프레젠테이션 레이어에 남겨두면 올바른 프로세스를 호출 할 수 있습니다. 따라서 의사 결정을 위쪽으로 밀어내는 것이 좋습니다 (예 : 오른쪽 필드 표시). 더 이상 공장이 필요하지 않습니다.

이유가있어 실용적이지 않고 여전히 Type에서 구체적인 구현을 동적으로 선택해야하는 경우 공장 계약서는 모든 회사 유형을 수용 할만큼 충분히 추상적이어야합니다.

응용 프로그램 수준에서 일반 createCompany 메서드를 구현 한 경우 이전에 해당 문제를 이미 해결했습니다.

+0

솔직히 말해서이 모든 것이 "프리젠 테이션 레이어"와 어떤 관련이 있는지 확실하지 않습니다. –

+0

@AlexeyZimarev 문제를 설명하기 위해 선택한 방법이지만 도메인에만 초점을 맞춤으로써 해결할 수 있습니다. 프리젠 테이션 계층은 일반적으로 다른 잠재적 인 클라이언트 사이에서 응용 프로그램 서비스의 직접 클라이언트입니다. 저는 고객이 의도를 더 잘 묘사 할 때 모든 것이 훨씬 쉬워진다는 점을 강조하고 싶었습니다. 나는 공공 및 민간 기업을 창출하는 것이 비즈니스 관점에서 볼 때 전혀 다른 프로세스로 보일 수 있다는 점에 초점을 맞춤으로써 요점을 세울 수있었습니다. 그래서 그들은 다른 진입 점을 가질 자격이 있습니다. – plalx

0

나는 그것을 바로 것 그리고 내가 문제의 일부는 당신이 가지고있는 모델이라고 생각

진행하는 방법을 잘 모릅니다하지 않습니다 내 응용 프로그램과 시나리오 중 하나를 사용하여 시도 ; 예를 들어 사기업이 주식을 소유 할 수 있다는 점에서 차이는 공개적으로 거래되는 것이 아니라 내부적으로 거래된다는 것입니다.

  • 그래서 예를 들어, 당신은 numOfShares는 공용 및 개인 주식의 수를 나타내는, 원시적이지만 적절한 VO를하지 않도록 모델을 조정하여 문제를 해결할 수 있고, 적절하게 콘크리트의 생성자에 의해 소비.

  • 회사가 거래해야하는 주식 수가 변경 될 수 있으므로 주식 설정이 불변 조작이 아니어도되며 별도의 방법이 될 수 있습니다 (그리고 예를 들어, 비상장 회사 주식에 관심이 없다면, 그러한 방법은 구체적인 PublicCompany 구현에만있을 수 있습니다.

  • 또는 모델을 다시 생각하고 첫 번째 개념으로 주식을 볼 수 있습니다 즉그들은 회사의 단지 하위 속성은 아니지만) 결국

(공공 또는 민간을 보유하고있는 개체에 대한 참조로, 그 자체에 존재함으로써 적절한 집계 루트), 그것은이다 도메인을 모델링하는 방법에 따라 달라지며, 이는 차례로 해결하려는 문제에 달려 있습니다. 대부분의 경우 단일 Factory로 요구 사항을 충족시킬 수없는 상황에 직면했을 때 별도의 Domain 개념을 다루고 있으며 모델을 다시 생각하거나 사용해야한다는 좋은 신호입니다 하나 이상의 공장.

관련 문제