나는 물건을 다루는 invoke 함수가 있다는 것을 알고있다. 나는 그러한 행동을 사용하는 "정확성"에 전반적으로 관심이있다. 내 문제는 이것입니다 : 서비스 개체 마녀 서비스를 고려하는 방법이 포함되어 있습니다. 내가하고 싶은 일은 나중에 침입하지 않고 이러한 서비스의 동작을 변경하는 것입니다. 예를 들어 : 나는 새로운 클라이언트 응용 프로그램에 동일한 서비스를 제공 할 필요가 나는 또한 플래그를 설정처럼 특정 여분의 물건을 할, 또는 만들거나 특정 데이터를 업데이트 할 필요가 있음을 알 수 2개월 후Java에서 make runtime 결정된 메소드 호출을 호출 할 수 있습니까?
class MyService {
public ServiceResponse ServeMeDonuts() {
do stuff...
return new ServiceResponse();
}
, 또는 다르게 응답을 인코딩 할 수 있습니다. 내가 할 수있는 것은 그것을 띄우고 일부 IF를 버리는 것이다. 필자가 생각하기에 이것은 테스트 된 코드와의 상호 작용을 의미하며 이전 서비스 클라이언트에 대해 원하지 않는 동작을 초래할 수 있기 때문에 좋지 않습니다.
그래서 저는 "NewClient"가 다른 동작을한다는 것을 알려주는 레지스트리를 레지스트리에 추가합니다. 시스템이 나는 사고와 접근 방법의 정확성과 같이 코드의 정확성에 특히 관심이없는 나는이
if(registrySaysThereIs different behavior set for this ServiceObject) {
Class toBeCalled = Class.forName("BehaviorOf" + usedServiceObjectName);
Object instance = toBeCalled.getConstructor().newInstance(method,client);
instance.preExecute();
....call the service...
instance.postExecute();
....
}
같은 일을 할 때
public interface Behavior {
public void preExecute();
public void postExecute();
}
public class BehaviorOfMyService implements Behavior{
String method;
String clientType;
public void BehaviorOfMyService(String method,String clientType) {
this.method = method;
this.clientType = clientType;
}
public void preExecute() {
Method preCall = this.getClass().getMethod("pre" + this.method + this.clientType);
if(preCall != null) {
return preCall.invoke();
}
return false;
}
...same for postExecute();
public void preServeMeDonutsNewClient() {
do the stuff...
}
}
: 그래서 나는 같은 것을 할 수 있습니다. 사실 나는 PHP에서 이것을해야만합니다. 마녀입니다. 상업적 이유로 노래해야하는 프로그래밍의 팝 음악의 한 종류입니다. 팝을 연주해도 책에서 정말 노래하고 싶어합니다. 또는 영감을 덜 준 유추 실용적인 필요성 및 기술적 접근 방법에 대해이 문제에 대한 귀하의 의견을 정말로 알고 싶습니다.
감사
가 실제로 그 whatI 처음에 생각입니다 : 내가 게시하기 전에 AOP에 더 깊이 살펴했다하지 않은 이유를 궁금해 그래서 지금, "서비스가 행동을 할 수있는 것보다 객체 측면을 가질 수 있다면"지금은 재발견 같은 느낌 바퀴. 짧지 만 포괄적 인 답변 주셔서 감사합니다. –