규칙 엔진을 사용하면 안 되는 경우는 언제인가요?[닫은]

StackOverflow https://stackoverflow.com/questions/775170

  •  13-09-2019
  •  | 
  •  

문제

나는 규칙 엔진을 사용할 때의 장점과 이를 사용해야 하는 몇 가지 이유에 대한 꽤 괜찮은 목록을 가지고 있습니다. 나에게 필요한 것은 규칙 엔진을 사용해서는 안 되는 이유 목록입니다.

지금까지 내가 가진 최고는 다음과 같습니다.

규칙 엔진은 실제로 워크 플로 또는 프로세스 실행을 처리하기위한 것이 아니며 워크 플로 엔진 또는 프로세스 관리 도구가 규칙을 수행하도록 설계되었습니다.

사용하지 말아야 할 다른 큰 이유가 있나요?

도움이 되었습니까?

해결책

나는 사람들이 매우 큰 규칙 세트를 사용하는 것을 볼 때 매우 긴장합니다 (예 : 단일 규칙 세트에서 수천 개의 규칙 순서로). 이것은 종종 규칙 엔진이 규칙을 유지하는 것을 희망하여 기업의 중심에 앉아있는 싱글 톤 일 때 발생합니다. 마른 필요한 많은 앱에 액세스 할 수 있습니다. 나는 많은 규칙을 가진 Rete Rules 엔진이 잘 이해되고 있다고 말하는 사람을 무시할 것입니다. 충돌이 존재하지 않도록 확인할 수있는 도구는 모릅니다.

나는 규칙을 작게 유지하기위한 분할 규칙 세트가 더 나은 선택이라고 생각합니다. 측면은 많은 객체들 사이에서 공통 규칙을 공유하는 방법 일 수 있습니다.

가능한 한 더 간단하고 더 많은 데이터 중심 접근 방식을 선호합니다.

다른 팁

규칙 엔진을 사용하는 것이 좋지 않은 생각이었던 개인적인 경험을 바탕으로 두 가지 예를 들겠습니다. 아마도 도움이 될 것입니다.

  1. 지난 프로젝트에서 나는 규칙 파일(Drools를 사용한 프로젝트)에 루프, 함수 등을 포함한 많은 Java 코드가 포함되어 있음을 발견했습니다.본질적으로 규칙 파일로 가장하는 Java 파일이었습니다.건축가에게 디자인 이유를 물었을 때 "규칙은 결코 비즈니스 사용자가 유지하도록 의도된 것이 아닙니다"라는 말을 들었습니다.

수업:"비즈니스 규칙"이라고 부르는 이유는 비즈니스 사용자가 쉽게 유지 관리/이해할 수 있는 시스템을 설계할 수 없는 경우 규칙을 사용하지 않는 것입니다.

  1. 또 다른 경우;요구 사항이 제대로 정의/이해되지 않았고 자주 변경되었기 때문에 프로젝트에서는 규칙을 사용했습니다.개발팀의 솔루션은 규칙을 광범위하게 사용하여 빈번한 코드 배포를 방지하는 것이었습니다.

수업:요구 사항은 초기 릴리스 변경 중에 많이 변경되는 경향이 있으며 규칙 사용을 보장하지 않습니다.비즈니스가 자주 변경되는 경우(요구 사항 아님) 규칙을 사용하세요.예:- 세금을 처리하는 소프트웨어는 세법이 변경되고 규칙을 사용함에 따라 매년 변경됩니다. 훌륭한 아이디어입니다.웹 앱의 릴리스 1.0은 사용자가 새로운 요구 사항을 식별함에 따라 자주 변경되지만 시간이 지남에 따라 안정화됩니다.코드 배포 대신 규칙을 사용하지 마세요.​

나는 비즈니스 규칙 엔진의 열렬한 팬입니다. 프로그래머로서 당신의 삶을 훨씬 쉽게 만들 수 있도록 도와 줄 수 있기 때문입니다. 데이터웨어 하우스 프로젝트를 수행하는 동안 내가 처음 경험 한 경험 중 하나는 전체 페이지에 걸쳐 복잡한 사례 구조가 포함 된 저장된 절차를 찾는 것이 었습니다. 그러한 긴 사례 구조에 적용된 논리를 이해하기가 매우 어려웠으며, 코드 1 페이지의 규칙과 5 페이지의 다른 규칙 사이에 겹치는 지 여부를 결정하는 것은 매우 어려웠 기 때문에 디버깅하는 것이 악몽이었습니다. 코드에 포함 된 300 개 이상의 이러한 규칙.

3000 개 이상의 규칙을 처리하는 데 필요한 회계 목적지에 대한 새로운 개발 요구 사항을 받았을 때, 나는 무언가가 바뀌어야한다는 것을 알았습니다. 당시 나는 프로토 타입을 연구 해 왔으며 나중에 모든 SQL 표준 운영자를 처리 할 수있는 맞춤형 비즈니스 규칙 엔진의 부모가되었습니다. 처음에는 Excel을 저작 도구로 사용했으며 나중에 ASP.NET 응용 프로그램을 만들어 비즈니스 사용자가 코드를 작성할 필요없이 자신의 비즈니스 규칙을 정의 할 수 있습니다. 이제이 시스템은 버그가 거의 없어서 제대로 작동 하며이 회계 대상을 계산하기위한 7000 개 이상의 규칙이 포함되어 있습니다. 나는 그러한 시나리오가 단지 하드 코딩으로 가능했을 것이라고 생각하지 않습니다. 그리고 사용자는 병목 현상이되지 않고 자신의 규칙을 정의 할 수 있다는 것이 매우 기쁩니다.

그럼에도 불구하고 그러한 접근 방식에는 한계가 있습니다.

  • 회사 비즈니스를 잘 이해하는 유능한 비즈니스 사용자가 있어야합니다.
  • 비즈니스 규칙 엔진이 처리 할 규칙으로 변환되는 모든 하드 코딩 조건을 결정하기 위해 전체 시스템 (즉, 데이터웨어 하우스)을 검색하는 데 중요한 워크로드가 있습니다. 또한 비즈니스 사용자가 이러한 초기 템플릿을 완전히 이해할 수 있도록주의를 기울여야했습니다.
  • 겹치는 비즈니스 규칙을 감지하기위한 알고리즘이 구현되는 규칙 작성에 사용되는 응용 프로그램이 있어야합니다. 그렇지 않으면 당신은 아무도 그들이 얻은 결과를 더 이상 이해하지 못하는 큰 혼란으로 끝날 것입니다. 맞춤형 비즈니스 규칙 엔진과 같은 일반 구성 요소에 버그가 있으면 디버깅하기가 매우 어려울 수 있으며 광범위한 테스트를 수행하여 이전에 작동 한 작업도 지금 작동하는지 확인하십시오.

이 주제에 대한 자세한 내용은 내가 작성한 게시물에서 찾을 수 있습니다. http://dwhbp.com/post/2011/30/implementing-a-business-rule-engine.aspx

전반적으로, 비즈니스 규칙 엔진을 사용하면 가장 큰 장점은 사용자가 무언가를 수정해야 할 때마다 IT 부서에 갈 필요없이 비즈니스 규칙 정의 및 저자를 다시 제어 할 수 있다는 것입니다. 또한 IT 개발 팀의 워크로드를 줄이며, 이제는 더 많은 부가 가치가있는 물건을 구축하는 데 집중할 수 있습니다.

건배,

니콜라

내가 "이중 가장자리 검"이라는 것을 알았던 하나의 poit은 다음과 같습니다.

비 기술 직원의 손에 논리를 배치합니다

기술적 인 측면에 한두 가지 다 분야의 천재가있을 때이 작업을 잘 보았지만 기술이 부족하여 부풀어 오르고 버그가 더 많으며 일반적으로 개발/유지 보수 비용이 발생했습니다.

따라서 사용자 기반을 진지하게 고려해야합니다.

Alex Papadimoulis의 기사는 매우 통찰력이 있다고 생각했습니다. http://thedailywtf.com/articles/soft_coding.aspx

포괄적이지는 않지만 좋은 점이 있습니다.

규칙 엔진을 사용하지 않을 때에 대한 훌륭한 기사 ... (하나뿐만 아니라 하나를 사용하는시기) ....

http://www.jessrules.com/guidelines.shtml

또 다른 옵션은 결과를 얻기 위해 어떤 순서로든 한 번만 적용하는 선형 규칙 세트가있는 경우 그루비 인터페이스를 작성하고 개발자가 이러한 새로운 규칙을 작성하고 배포하도록하는 것입니다. 장점은 일반적으로 최대 절전 모드 세션 또는 JDBC 세션을 통과하고 모든 매개 변수를 통과하므로 모든 앱 데이터에 효율적으로 액세스 할 수 있기 때문에 사악하게 빠릅니다. 사실 목록을 사용하면 시스템을 속도를 늦출 수있는 많은 루핑/매칭이있을 수 있습니다 .... 규칙 엔진을 피하고 동적으로 배치 할 수있는 또 다른 방법입니다 (예, 그루비 규칙이 데이터베이스와 우리는 재귀가 없었습니다 .... 규칙을 충족했거나 그렇지 않았습니다). 그것은 또 다른 옵션입니다 ..... 오 그리고 한 가지 더 이익은 들어오는 개발자를위한 규칙을 배우는 것이 아닙니다. 그들은 그루비를 배워야하지만 Java에 매우 가깝기 때문에 학습 곡선이 훨씬 좋습니다.

그것은 실제로 당신의 맥락에 달려 있습니다. 규칙 엔진에는 자리가 있으며 위의는 규칙 엔진이 필요하지 않은 매우 단순화 된 상황에 대해 동적으로 배치 할 수있는 프로젝트에 규칙이있는 경우 위의 또 다른 옵션입니다.

기본적으로 간단한 규칙 세트가 있고 대신 그루비 인터페이스를 가질 수있는 경우 규칙 엔진을 사용하지 않습니다.

내 경험에 따르면, 다음이 사실 일 때 규칙 엔진이 가장 잘 작동합니다.

  1. 문제 영역에 대한 잘 정의 된 교리
  2. 대부분의 입력을 주도하는 데 도움이되는 고품질 (바람직하게는 자동화 된) 데이터
  3. 주제 전문가에 대한 액세스
  4. 전문가 시스템을 만드는 경험이있는 소프트웨어 개발자

이 네 가지 특성 중 하나라도 누락 된 경우, 여전히 규칙 엔진이 당신에게 효과가있는 것을 찾을 수 있지만, 1 번 누락 된 상태에서 시도 할 때마다 문제가 발생합니다.

그것은 확실히 좋은 시작입니다. 규칙 엔진이있는 다른 것은 어떤 것들이 잘 이해되고, 결정적이며, 직선적이라는 것입니다. 급여 원천 징수는 그런 것입니다. 너 ~할 수 있었다 규칙 엔진에 의해 해결 될 규칙으로 표현하지만 상당히 간단한 값 테이블과 동일한 규칙을 표현할 수 있습니다.

따라서 워크 플로 엔진은 지속적인 데이터가있는 장기 프로세스를 표현할 때 좋습니다. 규칙 엔진은 비슷한 일을 할 수 있지만 많은 추가 복잡성을 수행해야합니다.

복잡한 지식 기반이 있고 검색이 필요할 때 규칙 엔진이 좋습니다. 규칙 엔진은 복잡한 문제를 해결할 수 있으며 변화하는 상황에 신속하게 적응할 수 있지만 기본 구현에 많은 복잡성을 부여 할 수 있습니다.

많은 의사 결정 알고리즘은 실제 규칙 엔진의 복잡성없이 간단한 테이블 중심 프로그램으로 표현하기에 충분히 간단합니다.

비즈니스 규칙 엔진과 같은 비즈니스 규칙을 강력히 추천합니다 오픈 소스로서 침을 흘립니다 또는 상업 규칙 엔진 Liverules와 같은.

  • 분쟁이 많은 비즈니스 정책이 많으면 핵심 기술 코드의 해당 부분을 유지하기가 매우 어렵습니다.
  • 규칙 엔진은 프레임 워크의 유연성을 제공하고 변경 및 배포가 쉽습니다.
  • 규칙 엔진은 어디에서나 사용해서는 안되지만 정기적으로 변경 불가피한 정책이 많을 때 사용해야합니다.

나는 다음과 같은 몇 가지 요점을 정말로 이해하지 못합니다.
a) 비즈니스 사람들은 사업을 잘 이해해야합니다.
b) 비즈니스에 대한 의견 불일치는 규칙을 알 필요가 없습니다.

저에게 BRE를 만지는 사람들로서 BRE의 이점은 시스템이 비즈니스 변화에 적응할 수 있도록 부름을 받았기 때문에 변화의 적응에 중점을 둡니다.
시간 x에서 설정 한 규칙이 다음과 같은 경우 시간 Y에서 설정 한 규칙과 다르 든 상관 없습니다.
a) 비즈니스 사람들은 사업을 이해하지 못합니다.
b) 비즈니스 사람들은 규칙을 이해하지 못합니까?

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