Spring MVC, вопрос дизайна - PullRequest
       17

Spring MVC, вопрос дизайна

2 голосов
/ 30 января 2010

Я начинаю с веб-разработки под Java EE и Spring и задаю вопрос о высоком уровне:

У меня настроена базовая оболочка: я закодировал некоторые доменные объекты (в основном, геттеры и сеттеры для различных атрибутов объектов, которые я в конечном итоге хочу отобразить на странице). Мне интересно, как правильно связать все, когда у меня закодированы некоторые DAO.

Предполагается простой блог с различными записями в блоге. Я кодировал класс для записей блога, содержащих соответствующие атрибуты, соответствующие записи. Каков соответствующий поток для контроллера, чтобы получить доступ к этим объектам домена, вызвать соответствующий DAO, упаковать данные в модель и вызвать представление?

Как вы можете сказать, я довольно озадачен тем, как все это сочетается, и как должны работать многоуровневые архитектуры. Пожалуйста, дайте мне знать, если какие-либо разъяснения необходимы. Спасибо.

Обновление: Спасибо за ответы ниже! У меня есть еще один вопрос: должны ли мои классы уровня обслуживания быть одиночными ? Может кто-нибудь объяснить, почему они не должны быть одиночками? Спасибо!

Ответы [ 2 ]

1 голос
/ 30 января 2010

Если вы еще этого не сделали, ознакомьтесь с пошаговым руководством Spring MVC.

Учебник Spring MVC

Это даст вам отличный пример того, как создать простое веб-приложение Spring MVC.

Единственная проблема заключается в том, что она не распространяется на использование аннотаций в Spring 2.5+. Вам нужно будет либо дождаться выпуска учебника по Spring 3.0 MVC, либо самостоятельно изучить официальную документацию Spring, чтобы узнать, как его использовать.

EDIT

Вот пример управления формой:

Примечание: весна 3.0.0

Ваш контроллер:

@Controller
@RequestMapping("/blog.htm")
public class BlogController{


  // Service layer class
  private final BlogManager blogManager;

  // Inject the blog manager into the constructor automatically
  @Autowired
  public BlogController(BlogManager blogManager){
    this.blogManager = blogManager
  }


  // Set up the form and return the logical view name
  @RequestMapping(method=RequestMethod.GET)
  public String setupForm(ModelMap model){
    model.addAttribute(new EntryForm());
    return "addBlog";
  }

  // Executed when posting the form
  @RequestMapping(method=RequestMethod.POST)
  public String addBlog(@ModelAttribute("entryForm")EntryForm entryForm){
    // Read the entry form command object from the form
    String text = entryForm.getText();

    // Call your service method
    blogManager.addEntry(text);

    // Usually redirect to a new logical view name
    return "redirect:/homepage";
  }  

}

Объект команды формы:

public class EntryForm{

  private String text;

  // setters and getters for text
}

Вот ваш класс обслуживания

public class BlogManager{

  private final BlogDAO blogDAO;

  @Autowired
  public BlogManager(BlogDAO blogDAO){
    this.blogDAO = blogDAO;
  }

  public void addEntry(String text){
    int blogID = 100;  // simple example id for a blog
    Blog blog = blogDAO.findById(blogID);
    blog.addEntry(text);
    blogDAO.update(blog);
  }

}

И теперь вы обновляете свой файл spring.xml, чтобы связать все вместе

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">


 <!-- Scan for spring annotations -->
 <context:component-scan base-package="test.package"/>

 <!-- defined in the xml file and autowired into controllers and services --> 
 <bean id="blogManager" class="test.package.BlogManager" />
 <bean id="blogDAO" class="test.package.dao.BlogDAO" />

 <!-- Resolves logical view names to jsps in /WEB-INF/jsp folder -->
 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /property>
    <property name="prefix" value="/WEB-INF/jsp/"></property>
    <property name="suffix" value=".jsp"></property>        
</bean>


</beans>
1 голос
/ 30 января 2010

Контроллер (используйте аннотации в 2.5+, чтобы это был POJO) выполняет метод для класса Service Layer, который вводится Сервисный уровень внедряется с помощью DAO для получения объектов из постоянства. Бизнес-логика находится внутри доменных объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...