Ну, вы могли бы иметь два отдельных интерфейса, а затем другой интерфейс, который объединяет их. Это упростит возможность объявления одного параметра для обоих, например,
private IEncoder encoder;
private IDecoder decoder;
public ThingWhichUsesEncodeAndDecode(IEncoder encoder, IDecoder decoder)
{
this.encoder = encoder;
this.decoder = decoder;
}
public ThingWhichUsesEncodeAndDecode(IEncoderDecoder both)
{
this(both, both);
}
Это действительно зависит от того, как часто вы планируете использовать одну часть, а не другую. Большую часть времени я нахожу, что для кодирования / декодирования мне нужны обе части, поэтому я бы , вероятно, просто объявил один интерфейс с обоими методами - но это зависит от конкретной ситуации.