2015-01-12 5 views
2

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

Я прочитал о DAO картины и вопрос, что было то, что возникшие методы должны быть включены в необходимому в DAO? Например,

public interface UserDAO{ 

    public User getUserById(Integer id); 

    public void deleteUser(Integer id); 

    public void updateUser(Integer id, User user); 

    public void createUser(User user); 
} 

Можно ли сказать, что интерфейс удовлетворяет DAO -pattern? Если нет, какие методы следует добавить/удалить из него?

ответ

4

Если мы говорим в более общих методов, чем вы могли бы пойти с:

public interface GenericDao<D>{ 

    public D get(Long id);// as Id use Long instead of Integer, Ids can be very large numbers, Int can be not enough 

    public Collection<D> getList(SearchCriteria crit); //for retrieving more than one element 

    public void remove(Long id); 

    public void update(D entity); // remember that updated record should have already id inside, you can add assert inside 

    public void create(D entity); // assert that id is null 
} 

Последний шаг может быть заменой обновление/дополнить сохранить метод (по желанию).

Вы можете использовать дженерики, и сделать D реализовать некоторый интерфейс, который имеет метод GetId(), это поможет написать один класс для всех DAO, как родитель, уменьшит ваш код :)

public interface Model implement Serializable{ 

    Long getId(); 

} 

И внутри Youd DAO, можно было бы написать так:

public interface UserDAO <D extends Model>{ 
... 

С этого момента вы можете в ваших GenericDaoImpl выполнять все операции Crud. И все ваши dao, такие как UserDao, просто расширят интерфейс GenericDaoImpl, а интерфейсы Dao, такие как UserDao, расширят интерфейс GenericDao.

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

+0

Интересно, поэтому интерфейс может быть использован для доступа любого рода пользователей в проекте , Должны ли мы добавить метод, подобный методу getList, для получения коллекции объектов? – user3663882

+0

Когда вы создаете какой-либо API, вы, вероятно, будете иметь список, в котором вы хотите перечислить всех пользователей, поэтому список очень распространен. Для редактирования вы используете метод get (id) и т. Д. – Beri

+1

Я использую этот шаблон (с дженериками), и мои классы DAO расширяют общий основной класс, поэтому дублирование кода почти нулевое. – Beri

1

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

getUserByEmail(String email){} 

Вы можете добавить эти типы функций также ..