В этот момент я начинаю работу над небольшим веб-приложением на основе MVC. Теперь я пытаюсь реализовать основные классы для макета модели с использованием шаблона DAO.Java Generics. Какая польза в моем случае?
Итак, в первую очередь создать два класса объектов (например): Автор и книга:
package myProject.model.entity;
import java.io.Serializable;
public class Author implements Serializable {
private static final long serialVersionUID = 7177014660621405534L;
private long id;
private String firstName;
private String lastName;
public Author() {
}
// getter and setter methods here
}
и книга класс:
package myProject.model.entity;
import java.io.Serializable;
public class Book implements Serializable {
private static final long serialVersionUID = 7177014660621405534L;
private long id;
private String title;
private String description;
public Book() {
}
// getter and setter methods here
}
На следующем шаге, я вижу, что классы Книга и автор имеют getId()
и setId()
. так, я создаю интерфейс Persistent
для моих классов сущностей:
package myProject.model.entity;
public interface Persistent {
public long getId();
public void setId(long id);
}
Итак, первый мой вопрос:
Это правильное применение для model
пакета?
На следующем этапе я начинаю реализовывать классы для пакета dao
.
package myProject.model.dao;
import java.util.List;
import myProject.model.entity.Persistent;
public interface Dao {
Persistent get(long id);
void save(Persistent persistent);
void delete(long id);
}
Следующий шаг: создание интерфейсов AuthorDao
и BookDao
, которые расширяют базовый дао interface Dao
Но оба интерфейса: AuthorDao и BookDao - на данный момент пуст. Что вы думаете - это нормально, что интерфейсы пустые? Это мой второй вопрос.
И на последнем шаге я создаю пакет model.dao.hibernate
и добавляю к пакету классу AuthorDaoHibernate и BookDaoHibernate - оба класса реализуют интерфейсы AuthorDao и BookDao.
И мой главный вопрос теперь:
мой интерфейс Dao
работы с объектами типа Persistent
и я не использую дженериков. И все хорошо и приятно.
Что вы думаете - какие преимущества у меня есть, если я переделываю Dao
интерфейс остроумие Generics:
package myProject.model.dao;
import java.util.List;
import myProject.model.entity.Persistent;
public interface Dao<Persistent> {
T get(long id);
List<T> getAll();
void save(T persistent);
void delete(long id);
}
Моих Dao классы работают только с постоянными лицами - не какой-либо другой типа объекта ...
Есть ли у вас какие-либо причины во мне, если вы используете Generics?
BaseEntity - должен быть абстрактным или нет? – user471011
@ user471011 нет, он не должен быть абстрактным, это просто не аннотируется как сущность, и вы не можете сохранить простой экземпляр «BaseEntity». Было бы целесообразно сделать «BaseEntity» и даже «BaseDAO» абстрактным, но я оставил это для краткости. – Thomas
мы можем обсудить об этом более подробно? по почте или через skype? Вам будет трудно? – user471011