Я создаю новое веб-приложение, которое будет использовать набор классов объектов доступа к данным (DAO) для выполнения операций CRUD с данными. Я знаю, что должен писать интерфейсы Java, когда у меня есть внешние пользователи / приложения, использующие мои классы DAO. Но если в этом нет необходимости, как вы думаете, мне все же стоит писать интерфейсы? Я буду внедрять классы DAO в классы Spring Controller (я использую Spring MVC), используя spring.
Использование интерфейсов для написания классов DAO
Ответы (6)
ПРИМЕЧАНИЕ, ЧТО: вы всегда должны пытаться отделить интерфейс от реализации. Это даст вам больше контроля над другими слоями, используя этот слой DAO.
Но, как вы знаете, интерфейс дает вам больше абстракции и делает код более гибким и устойчивым к изменениям, потому что вы можете использовать разные реализации одного и того же интерфейса, не меняя его клиента. Тем не менее, если вы не думаете, что ваш код изменится, или (особенно), если вы считаете, что ваша абстракция достаточно хороша, вам не обязательно использовать интерфейсы
Другими словами: интерфейсы хороши, но прежде чем создавать интерфейс для каждого класса, подумайте об этом.
Да, ты должен. Ваши классы, которые их используют, должны полагаться только на интерфейсы. Это позволяет вам легко инициализировать клиентские классы поддельными реализациями ваших DAO, среди прочего, для тестирования этих классов. Если вы просто используете конкретный класс, то клиенты ваших DAO будут напрямую зависеть от этой единственной (доступ к базе данных) реализации, и их будет очень сложно протестировать.
Простота создания классов, полагающихся только на интерфейсы для служб, от которых они зависят, является одной из основных сильных сторон внедрения зависимостей, и вы окажете себе и своему приложению медвежью услугу, не воспользовавшись этим.
Самая большая причина, по которой вы должны писать интерфейсы для своих DAO (репозиториев?), Заключается в том, чтобы вы могли легко создавать макеты (или использовать фреймворк mocking) для модульного тестирования всего, что имеет зависимость от DAO.
Даже если вы не проводите модульное тестирование, рекомендуется следовать DIP.
Кроме того, сколько времени действительно нужно, чтобы "щелкнуть правой кнопкой мыши => извлечь интерфейс" в любой современной среде IDE?
Я не согласен с Color Blend. В основном мое мнение таково: все, что вводится Spring, должно поддерживаться (и ссылаться) на интерфейс.
Общий подход при разработке API для внешних клиентов - создание интерфейсов, а не классов.
Таким образом, клиент будет знать только о контракте API, который должен быть явно указан в интерфейсе javadocs, и не будет никакой зависимости от выбранных вами деталей реализации.
Кроме того, вы сможете тестировать клиентов вашего API в JUnit, предоставляя имитационные реализации вашего API, что было бы сложнее, если бы вы не использовали интерфейсы.
Я не думаю, что тебе стоит. Вы просто сожжете свое время. Создавайте их, только если это необходимо.