2011-03-21 4 views
6

내가 보는 모든 예제는 일종의 계산을 수행하고 끝나는 함수의 일종입니다. 그런면에서 FP는 빛을 발한다. 그러나 많은 알고리즘이없고 많은 데이터 전송 및 서비스가 필요한 엔터프라이즈 응용 프로그램 환경의 맥락에서 적용하는 방법을 보는 데 어려움이 있습니다.엔터 프라이즈 응용 프로그램 컨텍스트에서 FP 이해 (스칼라에서)

그래서 FP 스타일에서 다음 문제를 구현하는 방법을 묻습니다.

이벤트 버스 서비스를 구현하고 싶습니다. 이 서비스에는 청취자 등록 방법이 register이고 이벤트 게시에 publish이 있습니다.

OO 설정에서 두 가지 방법으로 EventBus 인터페이스를 생성하면됩니다. 그런 다음 구현에서는 목록을 사용하여 register에 의해 업데이트되고 publish에 사용되는 수신기를 보관할 수 있습니다. 물론 이것은 register에 부작용이 있음을 의미합니다. Spring을 사용하여 클래스를 생성하고 인스턴스를 게시자 또는 이벤트 구독자에게 전달할 수 있습니다.

이벤트 버스 서비스의 클라이언트가 독립적 인 경우 FP에서이를 모델링하는 방법 (예 : "테스트"메소드에서 모든 것이 생성되지는 않음)? 내가 볼 수있는 한, 등록자가 EventBus의 새로운 인스턴스를 반환하는 것을 무효화합니다. 다른 클라이언트는 이미 이전 인스턴스에 대한 참조를 보유하고 있기 때문입니다 (예 : 게시자가 알고있는 리스너에게만 게시 함).

스칼라에있을 솔루션을 선호합니다.

답변

0

솔루션의 스케치는 게시가 IO[Unit]을 반환해야한다는 것입니다. 리스너는 반복자 여야합니다. 등록은 IO[Unit]을 반환합니다.

4

기능적 반응 형 프로그래밍 기술을 면밀히 조사해야한다고 생각합니다. Scala에서 무언가를 원한다면, Ingo Maier, Tiark Rompf, Martin Odersky의 논문 Deprecating The observer pattern을 읽을 것을 제안합니다.

+0

나는이 논문을 알고 사실 그 정신에서 뭔가를 발전시켰다. 리스너를 등록하는 데 여전히 부작용을 사용합니다. – IttayD

관련 문제