2017-11-25 28 views
2

금융 시스템이있어서 저장, 업데이트 및 제어 제한을위한 모듈을 설계해야합니다. 각 고객마다 UserID가 있고 각 UserID에는 최대 크레딧 한도가 있다는 것을 알 수 있습니다. 예를 들어 UserID = 12는 MaxAmountPerDay = 10 $CurrentAmountPerDay입니다.계산 방법, 고객 신용 관리 및 업데이트 방법은 무엇입니까?

이제
User ID | MaxAmountPerDay | CurrentAmountPerDay 
------------------------------------------------- 
    12  | 10    | 0 
    25  | 100    | 84 

당신이 사용자 ID와 고객이 12가 나는 경우 제어 할 수있는 트랜잭션을 수행하고있다 = 때 상상할 수있는 다음과 같이

은 처음에는 간단한 모듈을 설계하고 테이블을 정의하고 싶었다 거래 금액 + 현재 금액> 최대 금액 다음 예외를 throw합니다. 트랜잭션을 수행하고 현재 금액을 업데이트해야하며 업데이트 후 예외가 발생하면 업데이트 작업을 롤백해야합니다. (업데이트 및 롤백은 다른 데이터베이스 트랜잭션 롤백은 새로운 금액으로 동일한 업데이트입니다)

이 디자인을하기 전에 더 나은 솔루션이나 오픈 소스 프레임 워크를 찾아보기로 결정했습니다. 내 고객의 요구 사항이 앞으로 변경 될 것입니다. 예를 들어 MaxAmountPerMonth 또는 일부 내가 지금 모르는 더 많은 요구 사항.

답변

0

, 그것은 정말 문제가되지 않습니다.
사용자 트랜잭션을 유효하게하려면 일부 데이터가 필요합니다.

프레임 워크에 대해서는 BPM을 사용할 수 있지만 그와 같은 작은 요구 사항으로 인해 오버 헤드가 발생합니다.
유효성 검사 규칙 유지 관리를 향상시키기 위해 할 수있는 일은 각 특정 규칙을 분리하는 것입니다.
오늘은 하나의 유효성 검사 규칙이 있지만 나중에 사용자 트랜잭션을 무효화 할 수있는 여러 규칙이있을 것입니다. 검증 인터페이스에 의존

TransactionRule rulesChain;

가 : 체인의 각 요소는 그래서이 인터페이스의 구현

public interface TransactionRule{ 
    void valid(UserInformation userInformation) throw ValidationException; 
} 

입니다

을 처리하려면
, 당신은 단순히 규칙의 체인을 정의 할 수 있습니다 .
규칙 체인에서 valid()을 호출하면 첫 번째 규칙이 적용됩니다.
사용자 정보가 규칙을 준수하면 손을 다음 규칙으로 전달했습니다.
그리고 이렇게 ... 그리고 요소가 ValidationException을 던지 자마자 규칙이 준수되지 않아 유효성 검사가 끝나고 트랜잭션을 취소해야 함을 의미합니다.

제안 된 방법은 책임 패턴 체인의 밝은 버전으로 볼 수 있습니다.
나는이 패턴에서 일반적으로 중요하지만 규칙 실행 순서는 "중요하지 않습니다"라고 말했습니다.

0

난 당신이 당신이 지금 원하는 것을 달성하는 데 도움이됩니다이 requirement.It을 구현하기 위해 데이터베이스 트리거를 사용 할 수 있다고 생각

데이터는 데이터베이스 테이블에서 또는 지원 서비스에서 올 수
+0

안녕하세요, 가능한 해결책 일 수 있지만 응답에 조금 더 자세히 설명하고 트리거를 구현하는 방법과 관련된 가능한 코드를 포함시키는 것도 좋습니다. 필요한 작업 코드 스 니펫으로 답변을 수정하십시오. –

+0

예! 나는 다음에 그것을 할 것이다. –