2010-02-22 5 views
0

HR 휴가 신청 시스템을 설계하려고합니다. 프런트 엔드에서 다음 요구 사항을 구현할 수있는 최선의 방법과 DB에서 데이터를 유지하는 방법을 사용하여 유효성 검사를 동적으로 처리 할 수 ​​있어야합니다. 다음은 직원이 휴가를받을 수 있는지 여부를 확인하는 방법에 대한 간단한 예입니다.은 규칙에 따라 유효성 검사를 동적으로 수행합니다.

"병가로 신청"한다고 가정하면이 휴가 유형은 다음 날에 "임시 휴가"로 직접 올 수 없습니다. 이전에 그/그녀가 신청하는 날이 병가로 표시된 경우 임시 휴업을 신청할 수 없습니다. 일단 우리가 이것을 확인하면 휴가 잔고에 대해 검증해야합니다. 직원이 프로그래머라고 가정합니다. 그/그녀는 한달에 1 병 휴가 (또는 급여주기)를 취할 수 있습니다. 1 달에 걸릴 수있는 병가의 수는 직원의 지정에 따라 다릅니다.

위의 예는 간단한 예입니다. 규칙은 복잡해질 수 있으며 직원 지정에 따라 수없이 많습니다. 데이터베이스에서 이러한 규칙을 유지하려고합니다. (어떤 구조/특성이 필요합니까?) 또한 프런트 엔드 코드 (C#)에서 규칙을 동적으로 평가합니다. 어떤 디자인 패턴이 필요합니까?

답변

1

Rules Engines은 자주 변경 될 수있는 복잡한 비즈니스 규칙에 이상적입니다. 여기에 a list for .Net.

우리는 복잡하고 끊임없이 변화하는 재무 규칙을 처리하기 위해 Drools (Java 버전)를 사용하며 매우 성공적이었습니다.

여기에 튜토리얼 좋은이 "시작"의

Getting Started with Drools.Net

여기서 우리는 일련의 규칙이의 말을 할 수 있었다 어디 한 번 시스템에 작업 한 모든 사용자 가이드

Drools.Net User Guide

+0

에는 이러한 엔진을 사용하는 방법에 대한 자습서가 필요합니다. – deostroll

+0

@deostroll : 추가됨 –

0

에게있어 우리는 10 개의 먼 유형의 규칙을 정의했다. Leave Balance는 예를 들어 1 규칙이됩니다. 우리는 아주 단순한 표현 트리를 생성하고 각 노드를 평가하여 조건이 통과되었는지 판단합니다. 예를 들어 여기에 두 피연산자를 묶는 데 사용할 수있는 AndRule이 있습니다.

public Rule 
{ 

    public abstract Eval(ContextData data); 
} 

public AndRule 
{ 
    public Rule Left{get;set;} 
    public Rule Right{get;set;} 
    public override bool Eval(ContextData data) 
    { 
     return Right.Eval(data) && Left.Eval(data); 
    } 
} 

다음으로 우리는 전체 그래프를 XML로 직렬화 할 수있었습니다. 이렇게하면 규칙에 대한 clob을 데이터베이스에 유지할 수 있습니다. 트리를 대체하여 규칙을 동적으로 전환 할 수 있습니다. 이제 네, 동적으로 새로운 유형의 규칙을 만들 수는 없지만 HR 부서가 휴무일을 제한하는 새로운 방법을 고안해내는 것을 의심합니다.

1

최근 마틴에 관한 기사를 읽었습니다. "사양"패턴에 대해 이야기하는 파울러의 사이트.

는 여기에 내가이 상황에서 적합 할 수 있다고 생각 링크 Specification Pattern

입니다.

관련 문제