다음 예가 있다고 가정 해 보겠습니다.함수 축적은 실제로 어떻게 작동합니까?
특정 제품 그룹에 속한 특정 제품이 있으며 제품 그룹 변경 제품 또는 가격으로 합계 가격을 합리적으로 요약하고자합니다 변경.
private class ProductGroup {
private String name;
}
public class Product {
private ProductGroup productGroup;
private int price;
}
이것은 Drools의 합계 규칙에 의해 삽입되는 논리적 사실을위한 클래스입니다.
private class ProductGroupTotalPrice {
private ProductGroup productGroup;
private int totalPrice;
}
주어진 ProductGroup의 총 가격을 합산하는 규칙이 있습니다.
rule "total price for product group"
when
$productGroup : ProductGroup()
$totalPrice : Number() from accumulate(
Product(productGroup == $productGroup, $price : price),
sum($price)
)
then
insertLogical(new ProductGroupTotalPrice($productGroup, $totalPrice));
end
그래서 제 질문은 주어진 ProductGroup에서 제품이 추가 될 때/작업 메모리에서 삭제, 그들은 ProductGroup 또는 가격이 변경되는 변경 논리가 될 것입니다 무엇인가? - 합계가 현재 상태를 기반으로하는 응용 프로그램의 시작에서 완료되고 논리적 사실이 총 가격으로 작업 메모리에 삽입됩니다. 그러면 한 제품에 대한 가격이 한 점에서 변경되므로 totalPrice를 업데이트해야합니다.
여기 프로세스가 가능하게 할 것입니다 방법 삼가지 경우입니다
- 증분 일정 시간 계산을하고와. 이전에 발생한 변경 사항을 고려하고 전체 가격에서 이전 가격을 빼고 변경된 하나의 제품에 대해 새 가격을 추가하십시오. (Excelent)
- 전체 합계가 다시 수행되었지만 지정된 ProductGroup의 기준을 충족하는 Product 인스턴스는 이미 알려져 있으므로 검색되지 않습니다. (Good)
- 작업 메모리의 모든 Product 인스턴스를 통과하는 루프가 수행되어 특정 ProductGroup의 조건을 충족시키는 루프를 확인합니다. (불량)
이러한 세 가지 경우 중 하나가 구현되는 논리 또는 다른 것입니까?