DDD : 9. 팩토리 패턴

     

     

    9.1 팩토리의 목적

    • 도메인 객체를 생성하는데 복잡한 로직이 들어간다면, '도메인을 잘 표현하기 위한' 도메인 객체의 취지가 무색해진다. 도메인 규칙이 무엇인지 이해하기 어려워지기 때문이다.
    • 아래처럼 Customer 객체를 하나 생성하는데 필요한 로직이 무척 많다면, Customer 클래스를 봤을 때 '어떤 규칙이 있는지' 사실상 알기가 어려워진다. 
    • 이런 부분의 개선을 위해 도메인 객체 생성을 위한 팩토리를 도입을 고려하자.
    public class Customer{
    
    	public Customer(){
           // DB에서 데이터를 받아온다
           // DB에 데이터가 무결성이 문제 없는지 확인한다
           // 슬랙이랑 연동해서 확인한다
           ....
           // 수많은 확인 작업.
        
        }
    
    }

     

     

     


    9.2 생성자는 가능한 단순해야 함. 

    • 생성자는 가능한 단순해야한다.
      • 생성자 안에서 다른 도메인 객체를 생성한다면, 다른 도메인이 변경되었을 때 이 객체의 생성자도 영향을 받게 된다. 
      • 생성자가 단순해지면, 도메인 객체의 명세를 읽기가 더 편해진다.

     

     


    9.3 팩토리의 구성

    • 객체 생성 팩토리는 클래스 / 메서드 형태로 구현할 수 있음. 
    • 객체 생성을 캡슐화할 수 있음.
    • 팩토리를 이용하면 반환 타입을 인터페이스로 설정해 다형성을 구성할 수도 있음. 
    • 생성 절차가 복잡한 인스턴스를 만드는 코드를 모아둔 팩토리로도 만들 수 있음. 
    • 팩토리는 객체 생성 시 '의도'를 더 명확하게 표현한다.
      • createUrgentOrder(String name, boolean urgent)
      • createNormalOrder(String name, boolean normal)
      • new Order(String name, boolean urgent)
      • 어떤 메서드가 객체 생성 의도를 잘 드러내는가? 
    • 객체의 생성 여부를 팩토리 내에서 통제할 수 있음. (싱글톤, 플라이 웨이트 패턴)

    댓글

    Designed by JB FACTORY