Лучшие практики при использовании интерфейса

Много раз при разработке интерфейсов я продолжал сталкиваться с одной и той же ситуацией. Ситуация такова, что некоторые реализации, использующие интерфейс, требуют определенных параметров в интерфейсе, а другие - нет.

  • Какова лучшая практика при разработке интерфейса?
  • Можно ли иметь определенные реализации, которые реализуют интерфейс, но не используют все параметры?

Или в этих ситуациях я должен просто взять список (некоторую структуру) параметров и соответственно работать с этим списком в каждой реализации?

2 ответа

Решение

Нет, это не хорошо. Это нарушает принцип замещения Лискова.

Мне кажется, что ваши интерфейсы пытаются сделать слишком много. Либо используйте наследование интерфейса, либо разделите интерфейс на несколько. Обратите внимание, что лучше иметь много маленьких интерфейсов, чем один большой. Классы все еще могут реализовать все это.

Интерфейсы, как и классы, должны следовать SRP (принципу единой ответственности). imho гораздо важнее, чтобы интерфейсы делали это, так как они навязывают дизайн остальной части вашего приложения.

Я также стараюсь избегать добавления свойств как можно больше из интерфейсов.

Это нормально в некоторых случаях. Неважно, что вы на самом деле делаете с параметрами в реализации, если это удовлетворяет контракту, который интерфейс обещает поддерживать.

Но вы должны пересмотреть, не хотите ли вы на самом деле более специфический интерфейс для некоторых вещей, которым нужны эти параметры. В вашем стеке абстракций наличие "более низкого" интерфейса, требующего "более высоких" параметров, является нарушением инкапсуляции.

Другие вопросы по тегам