2016-12-26 12 views
0

나는 사용자가 같은 간단한 비즈니스 로직을 정의 할 수 있도록하고 싶습니다 , 사용자에 의해 정의됩니다.비즈니스 로직을 데이터베이스에 저장하는 방법은 무엇입니까?</p> <pre><code>if (x and y) then ... if (z or w) then ... </code></pre> <p>나 구체적를 넣어 보자 :</p> <p>을 나는 지원자가 몇 가지 요구 사항을 충족하는 경우 응답하는 HR 모듈을 개발하고 있어요

이러한 요구 사항은 논리 연산자 주위를 정의 할 수 있습니다

또는 (18 세 미만 이 있어야 부모 권한)

이를두고있다 (18 세) 데이터베이스 내부의 일종의 논리? 나는 그것이라고 생각하지만, 나는 이것에 시간을 보내는 것을 두려워하고 그것의 빈약 한 접근법을 찾는다.

답변

1

이 경우 논리는 사용자 정의 데이터 인 것처럼 보이므로 데이터베이스에 입력하는 것이 절대적으로 합리적입니다.

그러나이 입력의 구조/AST 모델을 andor 제어 흐름이 데이터베이스 레코드에 반영된 별도의 비즈니스 개체로 모델링하려는 경우 과도한 부담과 의지가 있습니다. 초기 구현 오버 헤드 - 향후 리펙토링을 매우 어렵게 만듭니다.

런타임시 평가할 간단한 텍스트 필드는 내용을 매우 쉽게 추출하고 추론 할 수 있으므로 가장 쉽게 이동할 수 있습니다.

귀하의 명확한 요구 사항을 모르는 경우 생태계에 룰 스토리지 백엔드 및 지침 편집기가있는 Java 용 규칙 엔진 인 Drools을 살펴 보시기 바랍니다. 덧붙여 말하자면 당신의 질문에있는 예제는 규칙 엔진의 도움을받을 것 같지만 불행히도 관련된 Ruby 라이브러리에 대해서는 실용적인 경험이 없습니다.

그렇지 않으면 thougtbot 블로그 - Writing a Domain Specific Language in Ruby의이 기사가이 컨텍스트에서 유용 할 수 있습니다.

0

나는 확실히 괜찮다고 생각합니다. 사용자가 비즈니스 로직이나 규칙을 정의하기 때문에 비즈니스 로직 양식 필드를 파트로 분할하는 것이 좋습니다 (규칙 : if/unless, operand1 : user.age, operand2 : permissions.parental operator1 : and, operator2 : greater_than ..). 각 비즈니스 논리 객체를 직렬화 된 JSON 열에 행으로 저장). 이렇게하면 사용자가 원하는대로 입력 할 수있는 단일 텍스트 필드와 비교할 때 유효성을 검사하고 오류가 발생하기 쉽습니다.

0

예측 가능한 로직을 저장하는 간단한 테이블을 만드는 것이 좋습니다. 예를 들어

: 당신이 언젠가에서 logic_opt 이상이있을 때

Table: business_logics 
Attributes: 
opt_1: decimal 
opt_2: decimal 
logic_opt: integer (enum: and|or) 
then_statement: string 

그래서이 BTW 당신이 & 리팩토링 나중에 검증의 이점을 얻을 수있는, 확장 가능! 사용자가 무료 텍스트를 입력하도록 허용하면 귀하의 경우에 매우 위험합니다!

0

괜찮습니다. 개발에 시간이 많이 걸리지 만 유연한 접근 방식입니다.

또한 자신 만의 DSL을 만들 필요가 없습니다. 이미 완료되었습니다. json-logic-ruby에서는 json에서 복잡한 규칙을 유지할 수 있습니다.