1

我正在使用 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
}

最好的方法是什么?整个应用程序的一个大服务类?或每个型号的不同服务等级?

4

2 回答 2

3

Martin Fowler 关于企业模式的书有一些关于构建服务层的很好的指导。在本书的摘录中,您可以找到以下内容:

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

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

于 2012-12-03T03:56:39.040 回答
0

为完整的应用程序创建一个大服务没有任何意义,并且随着应用程序的增长,它会开始产生readability同样的问题。maintenance

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

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

于 2012-12-03T02:45:49.253 回答