В чем необходимость архитектуры DAO? - PullRequest
3 голосов
/ 05 ноября 2010
  1. При программировании на Java всегда необходимо кодировать в соответствии с архитектурой DAO?Если да, в чем преимущества его использования?

  2. Я делаю проект, у которого есть диаграмма классов, как показано ниже.Каковы недостатки этого?

alt text

Класс сущности:

private void fillSONumber() {
    try {
        ZnAlSalesOrder o = new ZnAlSalesOrder();
        ArrayList a = o.getPendingSalesOrderIDs();
        for (int i = 0; i < a.size(); i++) {
            cmbSoNo.addItem(a.get(i));
        }
        o.close();
    } catch (Terminated ex) {

    }
}

Пример класса сущности:

public ResultSet select(String fields, String selection) {
    db = new Database();
    db.select("SELECT " + fields + " FROM " + name + " WHERE " + selection);
    return rs = db.rs;
}

и класс базы данныхсделать установление и уничтожение соединения.

Ответы [ 4 ]

4 голосов
/ 05 ноября 2010

При программировании на Java это всегда необходимо кодировать в соответствии с DAO архитектура? Если так, то каковы преимущества его использования?

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

Я делаю проект, у которого есть класс Диаграмма, как показано ниже. каковы недостатки этого?

Для меня это имеет смысл. Мой вопрос, вы единственный человек, который его использует. Если да, то нужны ли вам все эти интерфейсы? Интерфейсы важны, если вы передаете свою реализацию кому-то еще. Как API. И позже это может измениться на другой подкласс. Но если у вас есть полный контроль над вашим дизайном, я не думаю, что вы должны создавать раздутые интерфейсы даром.

Наконец, ваш код выглядит нормально, за исключением o.close(); Почему клиент должен вызывать close? Каждая из функций DAO должна быть достаточно умной, чтобы открыть и закрыть соединение. База данных должна быть прозрачной для ваших бобов. На мой взгляд, не нужно делать закрытие.

2 голосов
/ 05 ноября 2010

Цель шаблона DAO состоит в том, чтобы отделить данные, к которым вы пытаетесь получить доступ, от того, как они хранятся.

Например, вы можете создать DAO, который задает ряд методов, которые вы затем реализуете дляMySQL.Если вы когда-нибудь решите, что вам нужно перейти на MSSQL или Oracle, вам нужно всего лишь изменить реализацию, а не интерфейс, который можно было бы использовать в различных местах вашего кода.

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

Что касается вашего дизайна, базовый макет в порядке, но я бы рекомендовал не использовать универсальный метод выбора, как у вас.По сути, вы просто создаете еще один уровень абстракции, в котором что-то может пойти не так без какой-либо дополнительной выгоды.

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

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

1 голос
/ 12 июня 2011

DAO подобен протоколу или правилу, которым следует хранить ваши данные в определенной форме.В DAO у нас есть четыре Java-класса, такие как Connection, Normal Bean, Interface и Service Classes.Все эти классы выполняют свою собственную работу отдельно. Как и в классе Connection, вы создаете соединение для подключения к базе данных, в Normal Bean у вас есть все необходимые атрибуты. В интерфейсе есть только объявление метода, все бизнес-логики находятся в классе обслуживания,Таким образом, предопределено, что и где будет выполняться какая-либо работа. Поэтому любой человек, который является новым для проекта, может легко понять ход проекта.

1 голос
/ 05 ноября 2010

Объекты доступа к данным (DAO) означают методы CRUD (создание, чтение, обновление и удаление).Ваш пример класса EntityTable больше подходит для объекта Gateway, который инкапсулирует действия для нескольких строк данных в таблице.Итак, некоторые плюсы и минусы этого подхода для обоих типов объектов:

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

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

...