2013-04-11 2 views
1

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

public class CustomerDAO extends CommonDAO{ 

private String txnid; 
private String txnName; 

getters....setters.. 
} 

ответ

6

Для меня DAO является «просто трубой», созданной для инкапсуляции обмена данными с базой данных. Он строит и выполняет запросы или/и проксирует EntityManager, поэтому, по крайней мере, для JPA не требуется никакого состояния, за исключением экземпляра EntityManager. Запросы напрямую не зависят друг от друга.

Поэтому я бы поставил вопрос в обратную сторону - какое разумное состояние может иметь DAO?

+0

Где я приезжаю из вне , У меня есть очень специфический сценарий, где для обеспечения входных параметров запроса требуются изменения в нескольких методах DAO, которые в данный момент я пытаюсь избежать. Поэтому мне просто интересно, могу ли я сохранить эти входы в переменной ThreadLocal, но не знал, что говорят лучшие практики. Я знаю, что это звучит так, как плохой дизайн нужно продумать. – hakish

+0

@hakish - это похоже на то, что DAO использует шаблон [Builder] (http://en.wikipedia.org/wiki/Builder_pattern) для создания запросов, например, 'EntityManager'. Чтобы сохранить четкое разделение опасений, я бы извлек часть содержимого с учетом состояния в свой собственный класс состояния, затем передал результат в DAO или реорганизовал DAO для безгражданства, создав методы, требующие полных данных, необходимых для создания запроса , Если это приводит к слишком большому числу параметров метода, они могут быть инкапсулированы в новый тип типа «Предикаты» или аналогичные. – kostja

2

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

Кроме того, состояние, которое вы показываете, не является потокобезопасным - вы можете попасть в правильный беспорядок, совершая такое.

0

объекты DAO обычно реализуются после singleton pattern - это значит, есть только один экземпляр DAO для каждого отдельного объекта, поэтому информация о состоянии будет распределяться между всеми частями приложения с использованием DAO

Смежные вопросы