2015-12-19 1 views
2

Я занимаюсь ООП довольно давно, и я несколько раз смутился с использованием интерфейсов после спора с коллегой за несколько дней до этого.Нужен ли мне интерфейс, если есть только одна реализация?

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

В моем приложении есть Hibernate слой и несколько Sevices классов, как, например, UserServiceCompanyService и т.д. вопрос, был ли держать нас, отдельные интерфейсы также для каждого класса обслуживания. Например, UserServiceContract, CompanyContract и т. Д.

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

Я натолкнулся на то, что в этом учебнике также используются интерфейсы. Но нет единого интерфейса, который реализует несколько классов только один раз. example interface implentation

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

ответ

4

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

То, что вы видели в ссылке вы публикуемую является D в SOLID: Dependency Inversion Principle:

Положитесь на абстракциях, а не на реализации.

Вы лучше безопасны, чем жаль, вы знаете.

EDIT: Кроме того, я бы посоветовал использовать суффикс для интерфейсов (или префиксов). Если вы используете интерфейс вместо реализации, сделайте имя интерфейса чистым. В вашем случае будет использоваться UserService для интерфейса и UserServiceImpl для реализации.

+1

+1 для «вы пожелаете, чтобы вы были позже». И просто хочу упомянуть, что интерфейсы дают вам возможность изолировать ваши компоненты друг от друга, и это дает вам очень хорошее преимущество для модульного тестирования вашего кода –

+0

ok, так что лучше, если бы у меня были интерфейсы, когда я начал классы Userervice , Но я уже завершил проект, но я думаю, что нет смысла возвращаться и создавать интерфейсы. Это верно? – newday

+0

На самом деле проект не закончен. Мой совет: если вы решите, что хотите использовать DIP-подход, тем скорее, тем лучше. Позже будет сложнее внести необходимые корректировки. – Pablo

Смежные вопросы