2010-04-21 2 views
8

필자는 Pharo를 실행 중이며 종속성 삽입에 대한 비명 소리가 한 예로 있습니다. Guice. 스몰 토크와 비슷한 것이 있습니까?스몰 토크에 대한 의존성 주입 프레임 워크가 있습니까?

필자는 의존성을 명시 적으로 전달함으로써 모든 것을 일일이 정렬 할 수 있음을 이해합니다. 그러나 그것은 나에게 어색하고 장황하게 느낀다.

+1

http://stackoverflow.com/questions/243905/smalltalk-and-ioc –

+0

@MauricioScheffer :이 질문은 Inversion of Control에 대해 설명하며 Dependency Injection과 다릅니다. DI는 객체의 클라이언트가 객체의 종속성을 자신이 선택한 다른 객체로 대체 할 수있는 패턴으로, 객체가 더 재사용 가능하고 더 테스트 가능하도록 만듭니다 (잘 수행 된 경우). IoC는 응용 프로그램 코드가 프레임 워크에 등록되고 프레임 워크가 프레임 워크 코드를 직접 호출하는 응용 프로그램 코드가 아니라 나중에 응용 프로그램 코드를 호출하는 패턴입니다. 이것은 때때로 "우리에게 전화하지 마라, 우리는 당신에게 전화 할 것이다"라고 특징 지어진다. – Peeja

답변

4

의존성 주입에 중점을 둔 스몰 토크 방언이 있습니다. 메소드 이름뿐만 아니라 클래스 이름도 동적 룩업을 사용하도록 언어를 확장합니다. 클래스 이름의 새로운 조회는 상속 체인이 아닌 일련의 중첩 된 클래스를 통해 거품이 나오는 것을 제외하고는 메소드의 조회와 가장 비슷합니다. 따라서 중첩 환경을 변경하여 삽입 된 클래스를 변경할 수 있습니다.

방언에 대한 자세한 내용은 follow this link을 참조하십시오.

+0

그래, 나 Newspeak 알아. 그러나 Guice는 클래스 명 이상을 주입 할 수 있습니다. 테스트 중인지 아닌지 (범위)에 따라 다른 데이터베이스 연결을 우아하게 주입하는 데 사용할 수도 있습니다. 확실하게 Newspeak의 모델을 우아하게 모델링 할 수 있습니다. 그러나 그 자체로는 "스코프 (scope)"라는 개념이 없기 때문에 사용 사례에 유용합니다. – nes1983

0

난 정말 전문가가 아니라고하지만 구글에이 기사를 발견 : http://codebetter.com/blogs/jeremy.miller/archive/2006/05/05/144172.aspx

나는 이것이 올바른 방향으로 당신을 이끌 것입니다 바랍니다.
:

+1

나는 이것을 직접 보았다. 그것은 두 개의 기사를 가리킨다 : 하나는 DI에, 다른 하나는 스몰 토크에있다. 그러나이 두 가지를 동시에 논의하는 것은 아닙니다. – nes1983

1

With Guice, 특정 인터페이스를 생성자 매개 변수로 사용하도록 클래스를 정의한 것처럼 보입니다. 그런 다음 Guice에게 "이 인터페이스는 해당 인터페이스를 구현하는 클래스로 맵핑합니다"라고 말합니다.

Smalltalk 클래스는 프로토콜에만 신경을 쓰므로 그 sort've 것은 Smalltalk에서 완전히 필요하지 않습니다.

예제를 Smalltalk로 변환 한 경우 RealBillingService의 생성자에 해당 객체가 #logChargeResult : 및 #logConnectException :에 응답하는 한 해당 객체가 필요한 프로토콜을 구현하는 한 해당 객체를 전달할 수 있습니다. TransactionLog의.

Here's a link 위와 유사한 대답으로.

+0

guice가하는 일은 구성에 따라 프로그램에 물건을 주입하는 것입니다. 예를 들어 SandstoneDB (http://onsmalltalk.com/sandstonedb-simple-activerecord-style-persistence-in-squeak)를 생각해보십시오. 여기서 "person save"라고 쓰면 person 객체를 디스크에 씁니다. 그 사람은 어떻게 자신의 데이터베이스를 찾습니까? 기본 데이터베이스의 전역 상수를 조사합니다. 이는 고급 API이지만 테스트하기에는 좋지 않습니다. Guice는 그 사람에게 데이터베이스를 찾을 수있는 깔끔한 방법을 제공합니다. Guice가 해결하는 문제는 인터페이스로 인한 문제가 아니라고 확신합니다. – nes1983