Предположим, у меня есть интерфейс и конкретная реализация, которую использует клиентский код. Теперь, используя шаблон прокси-сервера, который реализует этот интерфейс, я мог бы перенаправить запросы, сделанные в интерфейс по сети. Конечно, сетевое соединение может завершиться неудачей, что может вызвать исключение.Принцип замены Liskov (LSP), шаблон прокси и исключения
Клиентский код, который использует интерфейс, получит неожиданное исключение. Я предполагаю, что в этой ситуации нарушается принцип LSP.
Но как можно обрабатывать сетевые исключения в этом случае, если им не разрешено распространяться из интерфейса?
Вот некоторые Java-код, чтобы уточнить, что я имею в виду:
interface Interface
{
abstract void method1();
abstract void method2();
abstract void method3();
}
class Implementation implements Interface
{
void method1();
void method2();
void method3();
}
class ProxyOverNetwork implements Interface
{
// I can't add the NetworkException as it is not part of the Interface
// and would violate LSP, but how to handle the network problems then,
// when the ProxyOverNetwork might not be the right place to do so?
void method1() throws(NetworkException);
void method2() throws(NetworkException);
void method3() throws(NetworkException);
}
бы я должен изменить интерфейс, чтобы исключения распространяться вне дома?
Почему, по вашему мнению, нарушение соединения является нарушением Принципа замещения Лискова? Задайте себе, сколько обязанностей у нас здесь? –
Исходный интерфейс не имеет никакого отношения к сетевому доступу, поэтому также не будет указывать какие-либо исключения, но реализация прокси-сервера, использующая сеть. – trenki
Я думаю, что механизм распределения, используемый как зависимость от прокси (за кулисами), является тем, что вас путает. Вы можете попробовать отрисовать его как зависимость от вашего прокси-интерфейса, и тогда все станет понятнее. –