Я знаю, что есть функция вызова, которая делает вещи, я в целом заинтересован в "правильности" использования такого поведения.
Моя проблема заключается в следующем:
У меня есть объект Service ведьма содержит методы, которые я считаю службы.
То, что я хочу сделать, это изменить поведение этих служб без последующего вмешательства.
Например:
class MyService {
public ServiceResponse ServeMeDonuts() {
do stuff...
return new ServiceResponse();
}
через 2 месяца я обнаружил, что мне нужно предложить ту же услугу новому клиентскому приложению, а также мне нужно выполнить некоторые дополнительные действия, такие как установка флага, создание или обновление определенных данных, или кодирование ответа по-другому. То, что я могу сделать, это всплыть и сбросить некоторые IF. На мой взгляд, это не очень хорошо, так как это означает взаимодействие с протестированным кодом и может привести к нежелательному поведению для предыдущих клиентов сервиса.
Поэтому я прихожу и добавляю что-то в свой реестр, сообщая системе, что «NewClient» ведет себя по-другому. Поэтому я сделаю что-то вроде этого:
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...
}
}
когда система сделает что-то подобное
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();
....
}
Меня не особо интересует правильность кода, как правильность мышления и подхода. На самом деле я должен делать это на PHP, который я считаю поп-музыкой программирования, которую я должен «петь» по коммерческим причинам, хотя я и играю в POP, я действительно хочу петь по книге, так что отложу свои или менее вдохновляющая аналогия. Я действительно хочу узнать ваше мнение по этому вопросу, потому что это практическая необходимость и технический подход.
Спасибо