Мои DAO начинают выглядеть одинаково, предлагаете схему разработки лекарств? - PullRequest
3 голосов
/ 13 января 2010

Я заметил, что наличие интерфейса и объекта доступа к данным (DAO) действительно начинает складываться:

public interface ForceDAO{
    public void store(Force force);
    public void delete(Long forceId);
    public Force findById(Long forceId);
    public List<Force> findAll();
    public void deleteAll();
}

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

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

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

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

  4. Наконец, поскольку при извлечении данных могут быть задействованы разные схемы доступа (Hibernate, JPA, iBatis и т. Д.), Может показаться, что обмен реализациями является желательным. Это хорошо вписывается в шаблон стратегии.

Какой самый элегантный и эффективный подход к разработке DAO? Какой подход лучше всего подходит для повторного использования и минимизирует избыточность?

Ответы [ 2 ]

4 голосов
/ 13 января 2010

Вы можете посмотреть на универсальный Дао .

2 голосов
/ 13 января 2010

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

Hibernate, JPA и т. Д. Также являются привлекательными альтернативами, особенно если вы можете использовать аннотации и т. Д., Чтобы вообще не писать эти классы DAO.

Мой последний запасной вариант - использование обобщенных и абстрактных базовых классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...