문제

.Net 및 Java용 IoC 프레임워크가 많이 있습니다.Smalltalk에 상응하는 프레임워크가 없는 이유를 아는 사람이 있습니까?이것은 다른 어떤 것보다 철학적인 질문에 가깝습니다.IoC 프레임워크의 필요성을 배제하는 Smalltalk 방식의 작업이 있는지 궁금합니다.

도움이 되었습니까?

해결책

MVC SmallTalk에서 발명되었으며 아마도 원본입니다 제어의 역전 뼈대. Java 상대보다 다소 가볍지 만 데이터를 보유하는 모델의 기본 개념을 가지고 있으며, 컨트롤러에서 프로모션 된 이벤트에 대한 응답으로 데이터를 렌더링하는 뷰입니다.

덜 뒤집히기 때문에 Java는 실제로 과도한 양의 보일러 플레이트 코드없이 웹 애플리케이션을 수행하기 위해 많은 프레임 워크 지원이 필요합니다. SmallTalk는 다음과 같은 프로그래밍 관용구를 지원합니다 연속, 저자가 실제로 이벤트 중심 코드를 작성하지 않는 척 할 수 있습니다. 해안 이와 같이 작동하여 다소 유연한 개발 패러다임으로 IOC의 이점을 제공합니다.

편집 : MVC는 SmallTalk의 UI를위한 프레임 워크입니다 (아마도 실제로는 프레임 워크가 아니지만 클래스 라이브러리는 지원을 구축했습니다). 그것은 컨트롤러가 발송 한 이벤트에 대한 뷰와 모델이 응답한다는 점에서 제어 속성의 역전을 가지고 있습니다. 제어 역전은 자바 응용 분야에서 광범위한 보일러 플레이트의 필요성을 줄이는 데 사용되는 프레임 워크 내의 설계 패턴입니다. 애플리케이션 프레임 워크의 일부 정의에서, 제어의 반전은 프레임 워크를 라이브러리와 구별하는 것으로 간주되는 주요 특성이다.

다른 팁

기능은 SmallTalk의 일등석 시민이므로 프레임 워크없이 IOC를 쉽게 갖추기가 쉽습니다.

저는 IOC나 의존성 주입 패턴이 스몰토크 환경에서는 실제로 존재하지 않는 문제를 해결한다고 생각합니다.스몰토크는 형식화되지 않은 동적 언어이며 메시지 전달을 사용하여 통신합니다.이는 언어 수준에서 본질적으로 느슨하게 결합된 개체를 만듭니다.모든 개체는 메시지를 처리할 수 있는 한 유형에 관계없이 다른 개체에 메시지를 보낼 수 있습니다.따라서 주어진 시간에 종속성을 변경하는 것은 상대적으로 쉽고 자연스럽습니다.종속성을 언제, 어디서, 어떻게 변경할지 결정하면 됩니다.

이에 대한 몇 가지 가능한 이유. 하나는 우리가 "IOC"예선을 사용하는 것을 귀찮게하지 않았다는 것입니다.이 예선은 본질적으로 중복됩니다. 프레임 워크를 부르는 것은 제어 흐름의 역전을 암시하기 때문입니다.

다른 하나는 SmallTalk 언어가 폐쇄 형태로 "IOC"흐름에 대한 직접적인 지원을 제공한다는 것입니다. 폐쇄로 프로그래밍의 결과 중 하나는 프레임 워크에서 발견되는 제어 흐름이 "정상적인"흐름 감각에서 "반전 된"느낌을 불러 일으키는 것만 큼 완전히 다르게 보이지 않는다는 것입니다. 오히려, 폐쇄로 인해, 제어 흐름은이 두 가지 관점 사이에서 항상 그리고 어디에서나 앞뒤로 뒤집 히고 있습니다. 단일 진술 내에서도.

세 번째 이유는 아마도 폐쇄가 없어도 설명되는 "제어의 역전"이 프레임 워크와 독특하게 연관되지 않기 때문입니다. 동일한 흐름이 대부분의 형태의 코드에서 I/O를 포함합니다.

넷째, SmallTalkers는 아마도 우리가 구조의 개념과 구성원 기능의 호출보다 객체의 개념과 그 사이에 전송 된 메시지에 대해 더 많이 기대므로 이런 종류의 흐름을 더 많이 사용할 것입니다. 폐쇄가 없을 때,이 두 뷰는 동등하고 상호 교환 가능하지만 클로저의 추가는 결과를 변화시킵니다.

마지막으로, 대체 제어 흐름의 REPL 스타일을 "단순한"것으로 묘사하지만 "정상적인"흐름의 "반전 된"감각, 거의 모든 곳에서 사용된다는 의미에서 정상적인 "반전 된"감각을 묘사 할 수도 있습니다.

요약하면, SmallTalk에 대해 동일한 종류의 프레임 워크가 존재합니다. 우리는 그것들을 조금 다르게 묘사합니다. 차이점은 적어도 부분적으로 Smalltalk의 폐쇄의 존재와 활용으로 인해 다른 많은 환경에서 아직 C ++, C#및 Java를 제공하지 않습니다.

Java에서는 다음과 같은 글을 쓸 때 의존성이 생성됩니다.

myclass32 temp = this.thething ();

이제 귀하의 코드는 MyClass32 클래스에 따라 다릅니다. 코드는 그것 없이는 작동하지 않습니다. 해당 클래스의 변경으로 인해 코드가 고려할 수 없으므로 코드에 많은 추가 변경 사항이 필요할 수 있으며, 이는 귀하의 클래스에 의존하는 추가 코드 변경이 필요할 수 있습니다. 많은 추가 작업.

smalltalk에서 당신은 온도를 쓸 것입니다 : = 자기 the jithing;

#GetTHETHE에 의해 반환 된 내용에 관계없이 코드가 작동합니다. 귀하의 코드는 MyClass32 클래스에 의존하지 않습니다. 당신의 유일한 종속성은 'temp'는 당신이 보내는 모든 메시지를 이해해야한다는 것입니다.

따라서 의존성 주입 프레임 워크의 목적은 Java와 같은 정적으로 입력 한 언어를 다이 7 가지 유형과 같이 더 잘 작동시키는 것입니다.

즉, SmallTalk에서 자주 따르는 디자인 패턴이 있습니다. 일부 클래스를 반환하는 MyClass와 같은 클래스 메드를 만듭니다. 'myclass'라는 이름이 필요하지 않습니다. 밤에는 다른 수업을 반환하는 여러 수업 중 하나 일 수 있습니다. 이 패턴은 SmallTalk MVC에 존재하며, 여기서 뷰 클래스에는 #DefaultControllerClass 메소드가 있으며 일반적으로 서브 클래스로 다시 정의됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top