Eternity's Chit-Chat

aeternum.egloos.com



Domain-Driven Design의 적용-3.Dependency Injection과 Aspect-Oriented Programming 4부 Domain-Driven Design

우선 ProductRepository 리팩토링하자. 구체적인 클래스에서 인터페이스를 추출하는 EXTRACT INTERFACE 적용하자. 인터페이스 명은 ProductRepository 하고 구현 클래스 명은 CollectionProductRepository 하자.


ProductRepository.java
package org.eternity.customer;

 

public interface ProductRepository {

  public void save(Product product); 

  public Product find(String productName);

}



CollectionProductRepository.java
package org.eternity.customer.memory;

import
org.eternity.common.Registrar;

import org.eternity.customer.Product;

import org.eternity.customer.ProductRepository;

 

public class CollectionProductRepository implements ProductRepository {

  public ProductRepository() {

  }

 

  public void save(Product product) {

    Registrar.add(Product.class, product);

  }

 

  public Product find(String productName) {

    return (Product)Registrar.get(Product.class, productName);

  }

}


EXTRACT INTERFACE 리팩토링을 통해 구체적인 클래스인 CollectionProductRepository 인터페이스인 ProductRepository 의존하도록 수정했다. 이제 OrderLineItem ProductRepository 인터페이스에 의존하도록 코드를 수정하자.



OrderLineItem.java

public class OrderLineItem {

private ProductRepository productRepositorynew CollectionProductRepository();

      

public OrderLineItem() {       

}

      

public OrderLineItem(String productName, int quantity) {

    this.product = productRepository.find(productName);

    this.quantity = quantity;

}


OrderLineItem productRepository 속성의 타입을 ProductRepository 인터페이스로 변경함으로써 OrderLineItem 인터페이스에 의존하도록 수정했다. OrderLineItem 생성자 내부에서는 ProductRepository 인터페이스 타입의 productRepository만을 사용하기 때문에 인터페이스에만 의존하고 구체적인 클래스에는 의존하고 있지 않다. 그러나 여전히 OrderLineItem 자체는 구체적인 클래스인 CollectionProductRepository 강하게 결합되어 있다. 원인이 무엇일까?


핑백

  • Domain-Driven Design | Jongmin Kim's Blog 2014-09-02 01:18:24 #

    ... Aspect-Oriented Programming 5부 [2] 2008/12/17 Domain-Driven Design의 적용-3.Dependency Injection과 Aspect-Oriented Programming 4부 2008/12/13 Domain-Driven Design의 적용-3.Depe ... more