어떻게 규칙을 같은 시스템에 사용되는 하나 Outlook Express 에서 작동이론?어떻게 해야 할까요?

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

  •  19-09-2019
  •  | 
  •  

문제

내가 이것에 대해 궁금:

에서 마이크로 소프트 아웃룩 익스프레스(또는 Outlook,기억하지 않지만,저는 맥 사용자),그들은 정말 멋지다.일반 규칙:

구성할 수 있습니다 규칙 세트를 자동으로 정렬하거나 삭제,귀하의 이메일을 위해 인스턴스입니다.그것은 놀라운 강력하고 사용하기 쉽습니다.

이러한 규칙을 보았을 거 같다:

"만약 이메일 받은편지함에 있는 주제를 포함하는'foo',또는'바',또는'foobar 삭제'그것은"

필요한 코드와 비슷한 강력한 형태 검사 시스템입니다.개발자 간단히 할 수 있는 규칙을 만드는 다음과 같다:

rule: [password_1] is_not_equal_with [password_2]
consequence: show_error '2921'

rule: [firstName] has_less_characters_than '2'
consequence: show_error '1211'

rule: [age] is_numeric, is_smaller_than '13', is_greater_than '130'
consequence: show_error '1522'

rule: [gender] is_equal_with 'female'
consequence: show_group [female_questions]

rule: [termsAndConditionsAccepted] is_not_checked
consequence: show_error '482'

rule: [age] is_less_than 21
consequence: hide_group [income_questions]

만,나는 몇 가지 아이디어를 어떻게 이용될 수 있습 및 게시할 것입니다 그들을 여기로 대답합니다.그러나기 전에 내가 바퀴를 재발견:가능성 개념을 사용할 수 있는 기반으로서 규칙을 발전시키기 위해 기반 검증 시스템과 유사한 이?나하지 않을 경우,당신은 어떤 제안이 어떻게 할 수 있을까요?

위의 예제에서,모든 것에 대괄호로 묶는 이름의 html 형태 요소입니다.에서 모든 것을 apostrophs"는"하드 코딩"값을 비교합니다.

정의된 규칙으로 번역 PHP 코드고 JavaScript 코드를 모두 클라이언트와 서버의 측면 유효성 검사를 수행합니다.

특징이 할 수 있어야 합니다:

  • 조건부의 규칙:무언가에 달려 무언가를 B
  • 가치 비교을 위해 정수,수레,문자열
  • 사용 일부 양식을 제어뿐만 아니라 논리처럼,"[성]is_equal_with'여성'"니다.

어떻게 할 수 있을까?What 은 엔터티 내가 고려해야에서 과학적인 관점?

내가 생각하는 이론적 개념의 이 플랫폼 독립적입니다.지만 나를 구현하는 것이 PHP 및 자바스크립트,왜 아무 이유도 없는 C++dev 응답하지;-) (나는 Objective-C 남자,btw)

도움이 되었습니까?

해결책

할 수 있습의 일부를 확인하기 위해서 오픈 소스의 규칙 엔진거나 심지어 지불을 위해 하나입니다.


지불을 위해 그것:
InRule, 비즈니스 규칙 엔진, ASA 비즈니스 규칙 엔진

오픈 소스:
OpenRules, 침을 흘릴

더 많은.을 포함한 일부에 내장 된 자바(Java 규칙 엔진(API JSR94)),and.Net(Windows 워크플로우 기초 엔진 규칙).

에 대한 확실하지 않 직 PHP 하지만입니다.

주석으로,나는 몇 가지를 사용 엔진아 헤일리 규칙 (기 전에 그들이 구입해서 오라클)에 드라이브 web UI 습니다.는 것을 알고 실행 속도가 절대적으로 중요합니다.우리 처리에 대한 2000 년의 규칙 페이지 당 load(저당 응용 프로그램),그리고 실행에서 40ms(오타).우리는 그것을 사용하여 결정 필드 페이지에서뿐만 아니라 여부를 결정하는 입력한 데이터를 일관성,만나 법적 표준의 기준,그리고 심지어 여부를 입력되었습니다.

의 일부 다른 엔진이 훨씬 더 느린에도 훨씬 작은 규칙을 설정으로 인해 어떻게 걸리는 단순히 인스턴스화하는 엔진이 있습니다.

나 또한 간의 경로를 아래로 쓰는 나 자신을 위한 작은 시스템입니다.내 경우에 사용한 자바 스크립트와 단순히 설정한 변수 데이터를 게시하기 전에 페이지를 실행하는 스크립트로 저장되었다.

이것이 또한 성능,작은 규모에서 그러나 내가 제한하는 간단하 go/no go 응답합니다.

다른 팁

소수의 규칙 및 메시지의 경우 Brute Force 알고리즘을 적용 할 수 있습니다. 각 규칙과 각 메시지를 가져 와서 맞는지 비교하십시오. 당신은 O (r) r이 규칙의 수이고 m은 규칙이 여러 조건을 가질 수 있다는 것을 고려하지 않고 메시지 수입니다.

수많은 규칙이나 메시지의 경우 Rete Network를 구현할 수 있습니다 (http://en.wikipedia.org/wiki/rete_algorithm). 이것은 약간의 기억이 필요하지만 실제로는 훨씬 빠릅니다. 규칙을 설계하는 방법에 따라 복잡성이 다릅니다.

첫 번째 접근법은 간단하고 설명 할 필요가 없다고 생각합니다. 그러나 도움이 필요하면 저에게 알려 주시면 그 아이디어를 자세히 설명하겠습니다. 두 번째 접근법을 설명하겠습니다.

더 나아 가기 전에 Rete 알고리즘에 대해 조금 읽으십시오.

Rete Network의 알파 부분에서 규칙에 나타나는 고유 한 조건을 저장합니다. 일부 규칙은 일부 조건을 공유 할 수 있습니다. 처럼:

규칙 1: if (message.date와 같음 24.10.2009) 및 (Message.Title이 "Hello"를 포함 함) 무언가를하십시오 1

규칙 2: if (message.hasattachement는 true)이고 (message.date는 24.10.2009와 같습니다)

그래서 네트워크의 알파 부분에는 3 개의 요소가 있습니다.

  • C1 : (Message.Date와 같음 24.10.2009)
  • C2 : (메시지. Title은 "Hello"를 포함합니다)
  • C3 : (메시지. Hasattachement는 사실입니다)

베타 네트에는 C1-C2 및 C3-C1을 연결하는 두 개의 결합 노드가 있습니다.

베타 네트워크를 종료하는 생산 노드에는 메시지가 규칙의 모든 조건 (알파 부분)과 모든 일관성 검사 (베타 부분)를 충족 할 때 수행 해야하는 일련의 동작이 포함됩니다.

가장 복잡한 부분은 베타 네트워크입니다. 논리적이고 규칙을 원한다면 (다른 논리적 OP 또는 괄호 안)는 사소한 일입니다. 그러나 더 복잡한 구성을 원한다면 많은 코드를 작성하고 많은 테스트를 수행해야합니다.

RETE에 대한 자세한 정보 :

  • 대형 학습 시스템의 생산 일치 /-Robert B. Doorenbos. (1995)
  • 생산 시스템의 효율적인 구현 /-Charles L. Forgy (1979)

객체 지향 설계에서 한 가지 방법은 명령 패턴을 구현하거나보다 복잡한 요구에 대해 통역사 패턴을 구현하는 것입니다. 일반적으로 다양한 범주의 규칙에 대한 여러 클래스를 생성하고 더 복잡한 시나리오 (예 : Compositerule을 작성하여)를 구성 할 수 있습니다. 그들 모두는 execute () 또는 execute (컨텍스트)와 같은 인터페이스를 지원합니다.

규칙 인스턴스의 대기열을 구축하고 각 객체에 대해 각 객체에 대해 execute (컨텍스트)를 호출합니다. 컨텍스트는 당신이 행동하는 객체 (메시지, 형태 또는 무엇이든)의 인스턴스를 포함합니다.

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