2011-11-08 3 views
0

DB에서 & 버튼 목록을 가져 오는 간단한 POS 시스템을 개발했습니다. 모든 버튼을 포함하는 표는 버튼을 그리는 데 필요한 모든 정보 (크기, 위치, 라벨, 색상 및 관련 SKU)를 제공합니다.리플렉션 - DB 값에서 호출 할 메소드 및 매개 변수를 결정하십시오.

원래 버전에서는 모든 '기능'버튼이 하드 코딩되어 있습니다 (예 : 숫자 1-9, 지불, 가격 수준 변경, 종료 시프트 등). 더 맞춤 설정할 수있는 디자인으로 이동하려고합니다. 기능 단추는 또한 데이터베이스에 저장할 수 있습니다.

나는 반사를 기반으로 뭔가를하는 것을보고있었습니다. DB에 나타나는 모든 메소드를 포함하는 인터페이스로 작동 할 클래스가 있으며, 그러면 시스템 내의 필요한 메소드를 호출합니다. 그러나 이것을 DB에 매핑하는 방법을 모르겠습니다.

나는 모든 메소드가 부울, int, double 및 char이 혼합 된 0, 1 또는 2 매개 변수를 사용한다는 것을 확신합니다.

나는 내가 좋아하는 뭔가를 넣어 것입니다 판매를 지불 예를 들어 내가 메소드를 호출하는 데 필요한 모든 정보를 결정하기 위해 구문 분석 할 수있는 DB에 대한 표기법을 마련했습니다

paySale[] 

고객이 나에게 $ 50를주고 내가 '빠른 현금'버튼을 사용하고자하는 경우 데이터베이스에 있지만, 다음 메서드 호출이 체크

로 지불처럼

paySale[d 50] 

또는 무언가 좀 더 복잡한 될 것입니다

paySale[i 3, d 50] 

여기서 int는 지불 방법 유형 (이 경우 check)이고 double은 총계입니다.

내 문제는 내가 getMethod 메소드를 사용하는 방법을 인출 할 때() 나는 그런 double.class 같이 int.class를, 찾기 위해 매개 변수를 정의하는 방법을 알아낼 수 없다는 것입니다

이있을 것입니다 가격 수준 변경, 교대 종료, 계정/탭 등 지불하는 것과 같은 일을 처리하기 위해 호출해야하는 여러 가지 방법이 있습니다. 이렇게 쉬운 방법이 있다면, 나는 그것에 대해 공개합니다!

다시 한 번 감사드립니다.

class.getMethod(int.class, double.class, String.class) 등과 같은

답변

1

사용 무언가가 당신의 방법은 공공 사용 getDeclaredMethod() 대신하지 않은 경우.

솔직히 솔루션이 이상하게 들립니다. 내가 아는 한 실제로 DB 종류의 스크립트를 저장 한 다음 실행합니다. 그렇다면 바로 사용할 수있는 스크립팅 엔진을 사용하십시오. 예를 들어, java 1.6 이상에는 JavaScript 인터프리터가 내장되어 있습니다 (ScriptEngineManager 참조). 자바 스크립트를 생성하고 실행할 수 있습니다. 매우 제한된 스크립트 인터프리터를 직접 작성하는 것보다 훨씬 쉽습니다.

+0

자바 스크립트 인터프리터가 1.6으로 내장되어 있는지 전혀 몰랐습니다. – itsreeyan

+0

ScriptEngineManager의 제안 된 사용에 대한 대답을 수락합니다. 고마워, 당신은 정말로 그 문제를 단순화했습니다! – itsreeyan

1

나는이 기사에서 AlexR과 함께합니다.

이 가능하면이 가능하지만 데이터베이스에 실행 가능한 스크립트를 저장하고 앱의 컨텍스트에서 해당 스크립트를 실행하는 것이 좋습니다.

그렇다면이 시스템을 유연하게 사용할 필요가 있는지 질문합니다. 시스템에 필요한 기능 (명령) 수는 분명히 많습니다. 그 명령이 정상적으로 구현 될 수 있고 특정 키/etc에 할당 된 것처럼 보입니다. 정상적인 구성 메커니즘을 통해

+0

'정상적으로 구현되었다'는 것이 무슨 뜻인지 잘 모르겠다. 사용 가능한 기능이 제한되어 있지만, 대부분의 함수는 다른 양의 매개 변수에 대해 잠재적 인 가능성이 있으므로 (원래 예제처럼) 일종의 파서/통역사없이 이런 모든 것을 시도해 보는 것은 대단히 복잡합니다. – itsreeyan

+1

@Le_Ryan 예를 들어서 키를 정의 할 때 DSL이 필요하다고 생각하지는 않습니다. * 모든 지불에는 지불 방법이 있습니다. X는 키에 매핑됩니다. * 모든 지불에는 금액이 있습니다. 키를 $ 50로 매핑하고 있습니다. 지금까지 아무것도 똑바로 앞으로 설정을 넘어 아무것도 필요합니다. –

+0

나는 어디에서 왔는지 알 겠어. 나중에 참조 할 수 있도록 그 조언을 들으십시오. 귀하의 의견을 보내 주셔서 감사합니다! – itsreeyan

관련 문제