2010-03-04 4 views
1

기본적으로 RPG 유형의 Rails 애플리케이션이 있습니다. 스킬 데이터베이스에 스킬 데이터베이스를 저장하는 중입니다. 이름, 최소 레벨, 스킬 타입, 공식DB에 저장된 코드를 실행하는 방법은 무엇입니까?

내 수식이 현재 String으로 저장됩니다. 아이디어는 "1000 * min_level"과 같은 말을하고 어떻게 든 그것을 실행하여 기술 손상을 계산합니다.

이렇게하는 좋은 방법이 있습니까?

+3

하지 마십시오. 그냥 하지마. –

+0

합리적인 대안이 있습니까? 관리자가 새로운 기술을 정의 할 수는 있지만 응용 프로그램을 수정할 필요는 없습니다. – Karl

답변

1

응용 프로그램 논리에 응용 프로그램 논리를 유지하는 것이 가장 좋지만 eval()을 사용하는 간단한 문제 일 수 있습니다.

eval("1000 * %i" % min_level) 
+0

많은 기술이있을 수 있으며 그 기술을 하드 코드하고 싶지 않습니다. – Karl

+0

저는 (관리자 인터페이스를 통해) 게임 관리자로 편집 할 수있는 SkillConfig 모델을 만드는 것이 좋습니다. 승수를 거기에 넣으면 결과 = skill_config.foo_multiplier * skill.min_level 또는 무엇을 할 수 있습니다. 이점은 a) 하드 코딩 된 로직이없고 b) 잠재적으로 악용 가능한 eval()을 사용하지 않는 것입니다. – bojo

+0

나중에 시간대에 따라 손상을 구현하기로 결정하면 어떻게됩니까? 이를 구현하기 위해서는 단일 메서드를 수정하는 것과는 대조적으로 모든 기존 기술의 구현을 중단해야합니다. – Karl

1

eval을 사용할 수 있습니다. min_level이 범위에있는 변수이면 중간 단계없이 Ruby로 해당 문자열을 실행할 수 있습니다.

그런 식으로 코드를 실행할 수있는 보안 문제가 많습니다. 이 문자열이 어디에서 오는지에 달려 있습니다.

+0

더 안전하게 만들 수있는 좋은 방법이 있습니까? 내가 처리하고자하는 유한 수의 변수가 있다고 말하면서, 나는 그 외의 다른 변수에 대한 액세스를 어떻게 든 제한 할 수 있습니까? – Karl

+0

그러나 최종 사용자가 문자열을 입력 할 것으로 기대하지는 않습니다. 그것은 단지 일종의 관리자에 의해서만 수행 될 것이고, 나는 아직도 조금주의를 기울이고 있습니다. – Karl

+0

이 스킬 데이터를 입력/편집하는 "관리자"는 먼저 Ruby에 대한 충분한 지식이 있어야합니다 (적어도 논리가 어떻게 작동하는지 파악하기에 충분해야 함). 처음. 잘못 입력 된 논리가 실행되거나 실행되지 않거나 원하지 않는 결과를 생성 할 수 있기 때문에 잠재적 인 실패 지점입니다. – bojo

1

은 어쩌면 당신은 그 사이에 일을 시도 할 수 있습니다 : (?) 관리자가 직접 이러한 식을 편집 할 수 없습니다 만, 중간에 서 것 몇 가지 간단한 파서를 작성하는 것

  1. 구문 분석 및 언제 당신이 필요로하는 표현 관리자가 기술 값 및 기타 관련 매개 변수의 해시 주어진
  2. 실제로 데이터베이스에서 식을 평가 데이터베이스에 저장하기 전에, 입력 검증이
관련 문제