Моделирование действий в Java - PullRequest
0 голосов
/ 19 февраля 2020

Я хочу стандартизировать общие действия, используя шаблон проектирования, но я не уверен, какой из них лучший.

Скажем, если мы начнем с двух сервисных Java классов с двумя операциями / методами каждый .

class Service1 {
    public void performSomething() {
        // Some complex algorithm implemented here
    }
    public void performSomethingElse {
        // Some complex algorithm implemented here
    }
}

class Service2 {
    public void performSomething() {
        // Some complex algorithm implemented here
    }
    public void performSomethingElse {
        // Some complex algorithm implemented here
    }
}

Два сервиса используют одни и те же алгоритмы, поэтому, естественно, я бы хотел провести рефакторинг performSomething() и performSomethingElse(). Мой подход заключается в создании двух классов с одним методом для каждого рефакторизованного метода.

interface Action {
    public void run();
}
class PerformSomething implements Action {
    public void run() {}
}
class PerformSomethingElse implements Action {
    public void run() {}
}

class Service1 {
    private PerformSomething algo1;
    private PerformSomethingElse algo2;

    public void businessUseCase1() {
        algo1.run();
        algo2.run();
    }

}

Мне кажется, что этот простой подход наивен, и я уверен, что есть более подходящий шаблон проектирования, который может представлять действие вместо создание собственного интерфейса для представления действий.

1 Ответ

1 голос
/ 19 февраля 2020

С учетом KISS и Spring я бы просто сделал следующее:

@Service
class Service1 {
    public void performSomething() {
        // Some complex algorithm implemented here
    }
    public void performSomethingElse {
        // Some complex algorithm implemented here
    }
    public void businessUseCase1() {
        performSomething();
        performSomethingElse();
    }

}

@Service
class Service2 {
    @Autowired
    Service1 service1;

    public void performSomething() {
        // Some complex algorithm implemented here
    }
    public void performSomethingElse {
        // Some complex algorithm implemented here
    }
    public void businessUseCase1() {
        service1.performSomething();
        service1.performSomethingElse();
        // or
        service1.businessUseCase1();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...