Задача: Я проектирую библиотеку, которая будет использоваться разработчиками.
Цель: Мне нужно убедиться, что изменения в будущих версиях не повлияютсуществующие разработчики.
Пример:
Ситуация во время первого выпуска:
Существует один класс
public class ClassSample
{
String methodSample(String para1,String Para2, int Para3, String Para4);
}
Ситуация во время второго выпуска:
Требования:
Ответ methodSample может возвращать несколько значений.
В методе methodSample требуется больше параметров.
Решение: Одним из способов может быть просто добавить другой перегруженный метод, который будет иметь новые параметры и возвращать объект, а не встроенный тип данных.
Но проблема с вышеприведенным решением состоит в том, что у него будет слишком много перегруженных методов.в будущем слишком много параметров будет излишним.
Модифицированное решение 1:
void methodSample(Request request, Response response)
В каждом выпуске (очевидно, при необходимости) я буду изменять классы запросов и ответов, чтобы иметь новые дополнительные методы для получения / установкиценности.В этом случае возникнет проблема, так как внутри метода я не смогу различить, является ли вызывающий абонент версии 10 или версии 20.
Модифицированное решение 2:
void methodSample(AbsractRequest request, AbstractResponse response)
В каждом выпуске мы можем расширять производный класс, как Request200 расширяет Request100, расширяет AbstractRequest, аналогично для классов ответов.В этом случае я могу проверить внутри метода, является ли вызывающий объект версии 10 или версии 20, проверив типизацию экземпляра.
В итоге Модифицированное решение 2 выглядит хорошо для меня, что вы думаете?