Допустим, я хотел определить интерфейс, который представляет собой вызов удаленного сервиса. Теперь вызов удаленной службы обычно что-то возвращает, но может также включать входные параметры. Предположим, что реализующий класс обычно реализует только один метод службы. Учитывая приведенную выше информацию, следующий плохой дизайн (это не совсем правильно):
public interface IExecutesService<A,B>
{
public A executeService();
public A executeService(B inputParameter);
}
Теперь предположим, что я реализую этот интерфейс с помощью класса, который выполняет удаленный сервис с входным параметром:
public class ServiceA implements IExecutesService<String,String>
{
public String executeService()
{
//This service call should not be executed by this class
throw new IllegalStateException("This method should not be called for this class...blabla");
}
public String executeService(String inputParameter)
{
//execute some service
}
У меня есть два вопроса относительно вышеизложенного:
- Является ли использование универсального интерфейса (
IExecutesService<A,B>
) хорошим в случае, когда вы хотите предоставить подклассы, которые требуют различных входных параметров и типов возврата для методов интерфейса? - Как я могу сделать выше, лучше? Т.е. я хочу сгруппировать исполнителей моих служб под общим интерфейсом (
IExecutesService
); однако, реализующий класс обычно реализует только один из методов, и использование IllegalStateException кажется действительно уродливым. Кроме того, параметр типа B вIExecutesService<A,B>
будет избыточным для реализующего класса, который вызывает службу без каких-либо входных параметров. Также кажется излишним создание двух отдельных интерфейсов для двух разных сервисных вызовов.