2009-06-13 8 views
2

학교에서 GRASP 패턴을 배우고 있는데 Creator 패턴에 대한 질문이 있습니다.GRASP Creator는 실제로 분리되어 있습니까?

의 당신은 세 가지 클래스가 있다고 가정 해 봅시다, 컴퓨터, UserRespository사용자.

GRASP Creator 패턴의 규칙 중 하나는 해당 객체를 포함하는 클래스에 객체 생성의 책임을 지정하는 것입니다. 이 가이드 라인을 따르면 UserRepository가 User의 작성자 여야합니다.

그래서 컴퓨터가 사용자를 만들려면 UserRespository에 요청합니다.

//in Computer's code 
repo.createUser("John"); 


//in UserRepository 
public void createUser(String name) 
{ 
    users.add(new User(name)); 
} 

이 효과적으로 사용자에서 컴퓨터을 분리. 정말?

분명히 컴퓨터에는 사용자에 대한 언급이 없지만 컴퓨터는 여전히 사용자 생성과 밀접하게 관련되어 있다고 생각합니다. 왜? createUser 메쏘드가 생성을 잘 보이지 않습니다. 사용자이 생성자를 변경하면 createUser 메서드를 변경하여 해당 변경 사항과 해당 메서드를 사용하는 모든 클라이언트를 반영해야합니다.

이 패턴을 사용하면 어떤 이점이 있습니까?

답변

1

나는 디커플링이 실제로 "이 클래스를 시스템에서 추출 할 수 있습니까?"라고 묻습니다. 따라서 메서드 뒤에 개체를 숨기면이 개체가 작성자 이외의 다른 곳에서 사용되지 않기 때문에 개체를 시스템에서 효과적으로 분리 할 수 ​​있습니다.

0

디커플링은 리포지토리 개체가 임의적 일 수 있다는 사실 때문에 발생합니다. 즉, 컴퓨터 오브젝트에 전달할 저장소 오브젝트를 선택할 수 있습니다. 여전히 CreateUser 메소드가 있지만 사용자 데이터의 소스는 어떤 리포지토리 객체가 사용되는지에 따라 결정됩니다.

예에서 저장소 개체는 일반적으로 UserRepository 개체라고합니다.