Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DAO interface, пример хорошего проектирования 
:(
    Опции темы
Maksym
  Дата 20.5.2008, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Может кто-нибудь привести пример хорошо спроектированого (удобного в использовании) DAO интерфейса?
Чтобы была предусмотрена возможность делать разнородные выборки, груповые update'ы и delete'ы по какому-то признаку или набору признаков и т.п. И все это как-то абстрактно оформлено...
Поправьте плз, если хочу странного...
PM MAIL   Вверх
v2v
Дата 20.5.2008, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Код

public interface BasicDAO {
  public int insertObject(...);
  public boolean deleteObject(...);
  public Object findObject(...);
  public boolean updateObject(...);
  public RowSet selecObjectRS(...);
  public Collection selectObjectTO(...);
  ...
}

this / это смотрел ?

Это сообщение отредактировал(а) v2v - 21.5.2008, 00:00


--------------------
PM   Вверх
Maksym
Дата 21.5.2008, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



v2v
А вот что там вместо точечек будет?
PM MAIL   Вверх
v2v
Дата 21.5.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Maksym, List<Object> smile
параметры зависят от твоих объектов и поставленной задачи, универсальный я думаю будет сложновато придумать ...

Это сообщение отредактировал(а) v2v - 21.5.2008, 00:07


--------------------
PM   Вверх
Maksym
Дата 21.5.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Паттерны это все здорово. А какая-нибудь реализация, грамотная...в качестве примера..?
PM MAIL   Вверх
Samotnik
Дата 21.5.2008, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Maksym,  а как же родненький сан  ?  smile 
http://java.sun.com/blueprints/corej2eepat...cessObject.html
PM MAIL   Вверх
Stampede
Дата 21.5.2008, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 24
Всего: 144



Молодец, Maksym, интересный вопрос поднял.

Если говорить о готовых разработках, то мне таковые не попадались. Но некоторыми мыслями по теме поделиться могу, поскольку многие вещи довольно много обдумывал и кое-что реализовал в своих проектах.

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

Код

public interface Dao<T> {
    public T insert(T obj);
    public T get(String id);
    public T update(T obj);
    public T delete(T obj);

    public List<T> list(String query);
    public int update(String query);
    public int delete(String query);
}


Тогда для простых случаев у нас уже будет готовая дефолтная реализация, и вместо того чтобы писать класс BookDao, мы просто заведем переменную Dao<Book> bookDao = new GenericDao<Book>().

Тут возникает вопрос: а как в общем виде реализовать приведенные методы для наперед неизвестного класса-сущности? В какую таблицу обращаться, какие поля обновлять? Самый простой ответ - через любое ORM-средство, которое владеет всей этой инфой. Более того, для нашего удобства все это хозяйство даже стандартизовали в форме JPA, чтобы люди не страдали выдумывать свои собственные аннотации.

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

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

Вот такие вот мысли вслух.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
v2v
Дата 21.5.2008, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Цитата(Stampede @  21.5.2008,  02:51 Найти цитируемый пост)
Теперь рассмотрим запросы. 


Stampede, вторая часть как раз самая интересная. немогли бы вы поподробней (на примере) объяснить как вы это делаете?


--------------------
PM   Вверх
SuperFly
Дата 21.5.2008, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 19.11.2007

Репутация: нет
Всего: нет



А зачем нам держаться за POJO где не попадя? Я поддерживаю идею интерфейсов с разной реализацией.
PM   Вверх
fixxer
Дата 21.5.2008, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(Stampede @ 21.5.2008,  02:51)

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

Код

public interface Dao<T> {
    public T insert(T obj);
    public T get(String id);
    public T update(T obj);
    public T delete(T obj);

    public List<T> list(String query);
    public int update(String query);
    public int delete(String query);
}


Тогда для простых случаев у нас уже будет готовая дефолтная реализация, и вместо того чтобы писать класс BookDao, мы просто заведем переменную Dao<Book> bookDao = new GenericDao<Book>().

Как всегда, все уже украдено до нас.
http://www.hibernate.org/328.html


--------------------
user posted image
PM MAIL ICQ   Вверх
Maksym
Дата 21.5.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Stampede
Вот, человек понял, что я хочу узнать smile +1
По второй части твоего поста, о чем речь в общем и целом понятно, но действительно интересно услышать чуть детальнее.

fixxer
Хороший линк, спасибо. Сам реализовывать не пробовал?
PM MAIL   Вверх
v2v
Дата 21.5.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



там внизу пример, схожий на то , что Stampede и Fixxer описали.
http://www.ibm.com/developerworks/java/lib...pop1/index.html


--------------------
PM   Вверх
Samotnik
Дата 21.5.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



я вопроса  не понял ?  меня игнорят ? ссылка не та что нада ?  
тогда обьясните плз, мне тоже интересно, я ж не просто так линку скинул 
 smile 
PM MAIL   Вверх
v2v
Дата 21.5.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Цитата(Samotnik @  21.5.2008,  14:21 Найти цитируемый пост)
я вопроса  не понял ?  меня игнорят ? ссылка не та что нада ?  

эта ссылка уже обсудилась в теме, будь внимательней.


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0842 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.