들어오는 데이터 항목을 처리하는 데 사용되는 규칙 트리를 나타내는 RuleTree 데이터 구조가 있습니다.규칙 처리를위한 API에 가변 상태 포함
- RuleTree는 현재 임의의 수의 (가능한 경우 중첩 된) 규칙을 포함하는 변경 불가능한 데이터 구조입니다.
- 다른 입력 데이터 항목에 동일한 RuleTree를 동시에 적용 할 다중 스레드가 있습니다.
- RuleTree는 하나 이상의 단계에서 데이터를 입력하는 데 적용됩니다. 적용 할 단계를 결정하는 것은 호출 코드에 달려 있습니다. 이 현재 잘 작동
ruleTree.applyStage1(data); .. // other stuff happens .. ruleTree.applyStage2(data); .. // other stuff happens .. ruleTree.applyStage3(data);
:
일반적인 제어 흐름은 무언가 같이 될 것입니다. 그러나 이제 RuleTree 처리 중에 일부 추가 상태 정보를 계산해야합니다 (예 : 트리의 특정 규칙에 대한 일치 항목 수 계산).
- 이 RuleTree는 가변 확인하고 나중에 다시 읽을 수있는 상태 정보를 저장 할 수 있도록 : 지금까지 내가 그것을 볼 수 있듯이, 나는 몇 가지 옵션이 있습니다. 그러나 서로 다른 스레드는 RuleTree의 다른 복사본이 필요하기 때문에 동시성은 더 까다 롭습니다.
- RuleTree에 스레드 로컬 상태를 추가하여 상태 정보를 계산하고 RuleTree 내에 저장할 수 있지만 서로 다른 스레드가 서로의 상태 정보를 트 래핑하지 않도록합니다. 그러나 이것은 모든 단계가 동일한 스레드에서 실행되도록 보장되어야 함을 의미합니다.
- ruletree에 추가 매개 변수 인
e.g. ruleTree.applyStage1(data, state)
으로 전달할 수있는 상태 정보에 대한 별도의 개체가 있어야합니다. 이렇게하면 RuleTree가 좋고 불변으로 유지되지만 호출 코드는 이제 상태 데이터를 별도로 설정하고 관리해야하기 때문에 호출자에게 더 복잡한 규칙을 사용하게됩니다.
어떤 접근 방식이 가장 좋고 그 이유는 무엇입니까?
답변을 주셔서 감사합니다. 저는 프록시 객체 시스템을 사용하는 것을 좋아합니다! – mikera
@mikera - 재미있는 질문에 감사드립니다! –