2016-03-19 2 views
0

Я новичок в использовании DAO в j2EE. Я немного запутался в реализации этого, поскольку я посмотрел, что уже существует конкретный класс, но мы используем интерфейс. Кто-нибудь скажет мне подробно, почему интерфейсы используются вместо конкретных классов напрямую?Приложение для объекта доступа к данным

+0

В общем, если есть конкретная реализация интерфейса, а также опция интерфейса, то есть выбор в дизайне (есть и другие аналогичные варианты в Ява). С Java мы знаем, что мы можем расширить только один класс, поэтому интерфейс может быть единственным вариантом, основанным на других вариантах дизайна. – ChiefTwoPencils

ответ

0

Объект доступа к данным - это всего лишь часть шаблона, абстракция над хранилищем данных под рукой. Поскольку данные хранилища данных могут меняться со временем (с MsSQL до MySQL или Oracle или любых хранилищ NoSQL), хорошей практикой является предоставление API для данных, следовательно, использование интерфейса в Java.

«Доступ к данным зависит от источника данных. Доступ к постоянному хранилищу, например к базе данных, сильно варьируется в зависимости от типа хранилища (реляционные базы данных, объектно-ориентированные базы данных, плоские файлы и т. Д. вперед) и реализации поставщика ».

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

«Использовать объект доступа к данным (DAO) для абстрактного и инкапсулировать весь доступ к источнику данных. DAO управляет соединением с источником данных для получения и хранения данных».

Если клиент будет использовать конкретный класс DAO вместо DAO-интерфейсов, то каждый раз, когда класс DAO изменяется и перекомпилируется, клиент также должен быть перекомпилирован. Во многих случаях это нежелательно, так как вы не хотите останавливать свое приложение и/или у вас нет контроля над клиентом.

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

Обратите внимание, что интерфейс DAO является всего лишь одним участником шаблона проектирования. Вы должны лучше понять, как DAO могут соответствовать/могут не соответствовать вашей архитектуре. Возможно, вам захочется организовать доступ к данным по-разному в соответствии с вашими требованиями.

В качестве альтернативы могут использоваться активные записи или карты данных и т. Д. Но на самом деле существует много разных возможностей.

Источник: http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

Источник: http://martinfowler.com/eaaCatalog/