Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate构建服务层_Java_Spring_Hibernate_Service_Struts2 - Fatal编程技术网

Java 使用Hibernate构建服务层

Java 使用Hibernate构建服务层,java,spring,hibernate,service,struts2,Java,Spring,Hibernate,Service,Struts2,我正在开发一个中型应用程序,使用Struts2、Hibernate和Spring来管理sessionFactory的生命周期。我的问题是,我应该创建一个大的服务类来为我的整个应用程序提供所有服务吗?或者应该为每个模型创建一个服务类 假设我有一个大的服务班 @Transactional public class Services { // So Spring can inject the session factory SessionFactory sessionFactory;

我正在开发一个中型应用程序,使用Struts2、Hibernate和Spring来管理sessionFactory的生命周期。我的问题是,我应该创建一个大的服务类来为我的整个应用程序提供所有服务吗?或者应该为每个模型创建一个服务类

假设我有一个大的服务班

@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
}
@Transactional
公共课服务{
//因此Spring可以注入会话工厂
会话工厂会话工厂;
public void setSessionFactory(SessionFactory值){
sessionFactory=值;
}
//sessionFactory.getCurrentSession()的快捷方式
公开会议sess(){
返回sessionFactory.getCurrentSession();
}
公共事件getEventById(长id){
返回(Event)sess().load(Event.class,id);
}
公众人物getPersonById(长id){
返回(Person)sess().load(Person.class,id);
}
public void deleteEventById(长id){
sess().delete(getEventById(id));
}
public void deletePersonById(长id){
sess().delete(getPersonById(id));
}
公共void createEvent(字符串名称){
Event theEvent=新事件();
theEvent.setName(名称);
sess().save(事件);
}
public void createPerson(字符串名称){
人员p=新人员();
p、 集合名(名称);
sess().save(p);
}
@抑制警告(“未选中”)
公共列表getEvents(){
返回sess().createQuery(“来自事件”).list();
}
@抑制警告(“未选中”)
公共列表getPeople(){
返回sess().createQuery(“来自个人”).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));
}
…这里有更多的服务方法
}

最好的方法是什么?为整个应用程序提供一个大型服务类?或者每个型号有不同的服务类别?

为完整的应用程序创建一个大型服务将没有意义,随着应用程序的增长,它将开始创建一个
可读性
以及
维护问题

遵循模块化方法总是更好的。正如@Asag所建议的:

为不同的模块创建不同的服务,并在其中定义与服务相关的方法。这将帮助您分离功能,也将帮助将来在同一应用程序上工作的任何人。

提供了一些关于构建服务层的好指导。在中,您可以找到以下内容:

对于足够小的应用程序,只有一个就足够了 抽象,以应用程序本身命名。以我的经验 较大的应用程序被划分为几个“子系统”,每个子系统 其中包括一个完整的垂直切片,穿过 架构层


因此,在服务层模式中没有成文的法律。在我看来,您不属于小型应用程序(您的
Services
类有太多的方法),因此一切都归结为识别应用程序上的子系统。本书还推荐了与抽象相关的服务层(可能是
EventService
PeopleService
)或应用程序行为(如
EventManagementService
);最终由您决定您的项目的最佳代码组织。

我的建议是遵循REST,使用最少的CRUD方法设置
PersonService
EventService
。一个具体的例子会很好。例如,请看
UserService