Использование интерфейсов для написания классов DAO - PullRequest
4 голосов
/ 22 декабря 2010

Я создаю новое веб-приложение, которое будет использовать набор классов объектов доступа к данным (DAO) для выполнения операций CRUD над данными.Я знаю, что должен писать интерфейсы Java, когда у меня есть внешние пользователи / приложения, использующие мои классы DAO.Но если нет такой необходимости, как вы думаете, я все еще должен написать интерфейсы?Я буду вводить классы DAO в классы Spring Controller (я использую Spring MVC), используя spring.

Ответы [ 6 ]

9 голосов
/ 22 декабря 2010

ПРИМЕЧАНИЕ: всегда пытайтесь отделить Интерфейс от Реализации.Это даст вам больше контроля над другими уровнями, используя этот уровень DAO.

Но, как вы знаете, интерфейс дает вам больше абстракций и делает код более гибким и устойчивым к изменениям, потому что вы можете использовать разныереализации того же интерфейса без изменения его клиента.Тем не менее, если вы не думаете, что ваш код изменится, или (особенно) если вы считаете, что ваша абстракция достаточно хороша, вам не обязательно использовать интерфейсы

Другими словами: интерфейсы хорошие, нопрежде чем создавать интерфейс для каждого класса, подумайте об этом

9 голосов
/ 22 декабря 2010

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

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

3 голосов
/ 22 декабря 2010

Самая большая причина, по которой вы должны писать интерфейсы для ваших DAO (репозиториев?), Заключается в том, что вы можете легко создавать mock (или использовать среду mocking) для модульного тестирования всего, что зависит от DAO.

Даже если вы не проводите модульное тестирование, все равно стоит придерживаться правила проектирования DIP

Кроме того, сколько времени на самом деле требуется, чтобы "щелкнуть правой кнопкой мыши => Извлечь интерфейс" внутри любой современной IDE?

2 голосов
/ 22 декабря 2010

Общий подход при разработке API для внешних клиентов заключается в создании интерфейсов, а не классов.

Таким образом, клиент будет знать только о контракте API, который должен быть явно указан в интерфейсе javadocs, и не будет зависеть от выбранных вами деталей реализации.

Кроме того, вы сможете протестироватьклиенты вашего API в JUnit, предоставляя имитационные реализации вашего API, что будет сложнее, если вы не используете интерфейсы.

2 голосов
/ 22 декабря 2010

Я не согласен с Color Blend. По сути, мое мнение таково: все, что вставляется пружиной, должно поддерживаться (и ссылаться) интерфейсом.

0 голосов
/ 22 декабря 2010

Я не думаю, что вы должны.Вы просто сожжете свое время.Создавайте их, только если это необходимо.

...