Ich weiß, dass es eine Aufruffunktion gibt, die das Zeug macht, ich bin insgesamt an der "Korrektheit" der Verwendung eines solchen Verhaltens interessiert. Mein Problem ist das: Ich habe ein Service-Objekt, das Methoden enthält, die ich Dienste betrachte. Was ich tun möchte, ist das Verhalten dieser Dienste ohne späteres Eindringen zu ändern. Zum Beispiel:Kann ich Runtime entschiedene Methodenaufrufe in Java aufrufen?
class MyService {
public ServiceResponse ServeMeDonuts() {
do stuff...
return new ServiceResponse();
}
nach 2 Monaten finde ich heraus, dass ich den gleichen Service zu einem neuen Client-Anwendung, und ich brauche auch einige zusätzliche Dinge zu tun wie Setzen eines Flags, oder zu machen oder zu aktualisieren, bestimmte Daten bieten müssen , oder codieren Sie die Antwort anders. Was ich tun kann, ist Pop-up und werfen einige IFs. Meiner Meinung nach ist das nicht gut, denn es bedeutet Interaktion mit getestetem Code und kann zu unerwünschtem Verhalten für die vorherigen Service-Clients führen.
Also komme ich und füge etwas meiner Registrierung hinzu und sage dem System, dass der "NewClient" ein anderes Verhalten hat. Also werde ich etwas tun:
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...
}
}
, wenn das System etwas tun wird, wie diese
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();
....
}
Ich bin nicht besonders interessiert Richtigkeit Code wie in Richtigkeit des Denkens und Ansatz. Eigentlich muss ich das in PHP machen, was ich als eine Art Popmusik des Programmierens sehe, die ich aus kommerziellen Gründen "singen" muss, obwohl ich POP spiele, möchte ich wirklich nach dem Buch singen, so dass ich meine mehr beiseite lege oder weniger inspirierte Analogie Ich möchte wirklich Ihre Meinung zu diesem Thema für seine praktische Notwendigkeit und technischen Ansatz wissen.
Dank
Eigentlich habe ich zuerst darüber nachgedacht: "Wenn Objekte Aspekte haben können, als dass Dienste Verhalten haben können", frage ich mich nun, warum ich nicht vor der Veröffentlichung noch tiefer ins AOP geschaut habe Rad. Danke für die kurze aber umfassende Antwort. –