Какова философия дизайна класса netty ChannelDuplexHandler? - PullRequest
0 голосов
/ 24 октября 2019

Это то, что сказал Javadoc ChannelDuplexHandler:

Реализация ChannelHandler, представляющая комбинацию из ChannelInboundHandler и ChannelOutboundHandler.

и определение класса, как показано ниже:

public class ChannelDuplexHandler extends ChannelInboundHandlerAdapter implements ChannelOutboundHandler

ChannelDuplexHandler расширяет ChannelInboundHandlerAdapter для использования всех своих шаблонных методов , в то время как Java не поддерживает множественное наследование, поэтому (может быть, компромиссным способом?) ChannelDuplexHandler внедряет ChannelOutboundHandler и переопределяет все методы, которые точно совпадают с ChannelOutboundHandlerAdapter реализацией.

Является ли эта избыточная работа хрупкой? Как-нибудь однажды решив изменить поведение шаблона ChannelOutboundHandler, я должен изменить зеркалирование реализации ChannelDuplexHandler?


Итак, мои вопросы:

  1. Почему расширяется ChannelInboundHandlerAdapter а не ChannelOutboundHandlerAdapter? только потому, что ChannelOutboundHandler имеет меньше методов для переопределения?
  2. Почему бы не использовать некоторые умные способы, чтобы избежать этого? (шаблоны агентства или деформации? Я не знаю, правильно ли я понимаю концепцию)
  3. Если ChannelOutboundHandler добавить какой-то новый метод интерфейса, у вас нет выбора, кроме как написать один и тот же код дважды в ChannelOutboundHandlerAdapter а ChannelDuplexHandler? (или где-то еще, может быть)
...