私は、Struts2、Hibernate、およびSpringを使用してsessionFactoryのライフサイクルを管理する中規模のアプリケーションに取り組んでいます。私の質問は、アプリケーション全体にすべてのサービスを提供する1つの大きなサービスクラスを作成する必要があるということです。またはモデルごとに1つのサービスクラスを作成する必要がありますか?
私はこの1つの大きなサービスクラスを持っているとしましょう
@Transactional
public class Services {
// So Spring can inject the session factory
SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory value) {
sessionFactory = value;
}
// Shortcut for sessionFactory.getCurrentSession()
public Session sess() {
return sessionFactory.getCurrentSession();
}
public Event getEventById(long id) {
return (Event) sess().load(Event.class, id);
}
public Person getPersonById(long id) {
return (Person) sess().load(Person.class, id);
}
public void deleteEventById(long id) {
sess().delete(getEventById(id));
}
public void deletePersonById(long id) {
sess().delete(getPersonById(id));
}
public void createEvent(String name) {
Event theEvent = new Event();
theEvent.setName(name);
sess().save(theEvent);
}
public void createPerson(String name) {
Person p = new Person();
p.setName(name);
sess().save(p);
}
@SuppressWarnings("unchecked")
public List<Event> getEvents() {
return sess().createQuery("from Event").list();
}
@SuppressWarnings("unchecked")
public List<Person> getPeople() {
return sess().createQuery("from Person").list();
}
public void removePersonFromEvent(int personId, int eventId) {
getEventById(eventId).getPeople().remove(getPersonById(personId));
}
public void addPersonToEvent(int personId, int eventId) {
getEventById(eventId).getPeople().add(getPersonById(personId));
}
.....Some more services methods here
}
これに対する最善のアプローチは何でしょうか?アプリケーション全体に1つの大きなサービスクラス?またはモデルごとに異なるサービスクラス?