Автор оригинала: Pankaj Kumar.
Шаблон проектирования MVC является одним из старейших архитектурных шаблонов для веб-приложений . MVC расшифровывается как Контроллер представления модели. MVC Шаблон проектирования используется для разделения логики разных уровней в программе на независимые блоки. Это известно как принцип Разделения интересов .
Шаблон проектирования MVC
С помощью шаблона проектирования MVC у нас есть следующие компоненты, от которых зависит наш дизайн:
- Модель, которая переносится с одного слоя на другой.
- Представление, которое отвечает за отображение данных, присутствующих в приложении.
- Контроллер отвечает за принятие запроса от пользователя, изменение модели и отправку ее в представление, которое отображается пользователю.
Идея, лежащая в основе шаблона MVC, заключается в очень четком разделении между объектами домена, представляющими объекты реального мира, и уровнем представления, который мы видим на экране. Объекты домена должны быть полностью независимыми и также должны работать без слоя представления.
В этом уроке мы попытаемся создать сильный пример MVC с приложением Spring Boot, которое использует Thymeleaf на уровне представления.
Архитектура приложения MVC
Прежде чем мы начнем создавать ваше приложение, всегда полезно структурировать его. Основываясь на шаблоне MVC, в нашем приложении будут следующие слои:
Пример шаблона MVC
Поскольку мы будем создавать приложение Spring Boot на основе шаблона MVC, мы начнем с создания проекта на основе Maven и добавим в него зависимости, связанные с Spring Boot.
org.springframework.boot spring-boot-starter-parent 1.5.7.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf com.h2database h2 runtime org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
Теперь давайте начнем с определения нашей модели.
Модель MVC
Давайте начнем определять фигуры и сначала перейдем к нашей модели. Первым шагом для примера приложения является определение нашего класса M odel:
package com.journaldev.mvcpattern.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Person { @Id @GeneratedValue private Long id; private String name; private int age = 0; //standard getters and setters }
Это простой класс модели, который может содержать информацию о человеке. Давайте использовать определенную модель в нашем Контроллере и Сервисе.
Контроллер MVC
Теперь, когда мы знаем, какие данные передавать в модели, давайте определим контроллер C , позволяющий пользователю запрашивать эти данные:
package com.journaldev.mvcpattern.controller; import com.journaldev.mvcpattern.model.Person; import com.journaldev.mvcpattern.service.PersonService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class PersonController { @Autowired PersonService personService; @RequestMapping(value = "", method = RequestMethod.GET) public String greetingForm(Model model) { model.addAttribute("person", new Person()); return "greeting"; } @RequestMapping(value = "/person", method = RequestMethod.POST) public String addPerson(Model model, @ModelAttribute Person person) { personService.createPerson(person); model.addAttribute("people", personService.getAllPersons()); return "result"; } }
В контроллере выше мы определили два API:
- Базовый URL-адрес приложения представляет собой простое представление, которое мы разработаем далее.
- URL-адрес
/person
приложения представляет собой простое представление, в котором данные о человеке сведены в таблицу.
Мы увидим виды через минуту. До этого нам также необходимо предоставить уровень сервиса и репозитория.
package com.journaldev.mvcpattern.service; import com.journaldev.mvcpattern.model.Person; import java.util.List; public interface PersonService { Person createPerson(Person person); ListgetAllPersons(); }
Реализация интерфейса выглядит следующим образом:
package com.journaldev.mvcpattern.service; import com.journaldev.mvcpattern.dal.PersonRepository; import com.journaldev.mvcpattern.model.Person; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class PersonServiceImpl implements PersonService { @Autowired private PersonRepository personRepository; @Override public Person createPerson(Person person) { return personRepository.save(person); } @Override public ListgetAllPersons() { return personRepository.findAll(); } }
Наконец, уровень DAL, интерфейс репозитория выглядит следующим образом:
package com.journaldev.mvcpattern.dal; import com.journaldev.mvcpattern.model.Person; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface PersonRepository extends JpaRepository{ }
Превосходно! Теперь, когда мы закончили с логикой доступа ко всем службам и БД, мы можем, наконец, попробовать наш взгляд.
Представление MVC
Давайте, наконец, поставим наш V iew на место. Сначала мы определяем наш greetings.html
страница в src/главная/ресурсы/шаблоны
каталог.
Spring Boot MVC Add new person
Далее мы определяем наш result.html
страница также:
Spring Boot MVC Person List
Id Name Age
Тест шаблона MVC
Теперь мы наконец-то можем запустить наше приложение, чтобы увидеть его в действии. Но здесь в центре внимания было не приложение. Основное внимание было сосредоточено на том, чтобы три компонента были полностью разделены, что было замечательно наблюдать. Однако на изображениях ниже показаны результаты проекта.
Преимущества шаблона проектирования MVC
Есть много преимуществ для использования шаблона MVC. Давайте изложим некоторые из них здесь:
- MVC позволяет быстро разрабатывать приложения. Если мы просто заранее определим уровень модели и передадим эту информацию команде разработчиков пользовательского интерфейса, они смогут начать создавать представления параллельно, поскольку внутренние разработчики разрабатывают контроллеры приложений и логику, лежащую в их основе, что приведет к более быстрой разработке.
- При изменении механизма представления уровень контроллера даже не должен знать, куда направляются данные. Он знает только логическое имя представления и даже не расширение HTML. Таким образом, очень легко переключиться на угловой вид, не влияя на контроллер.
- Шаблон MVC делает акцент на низкой связи между различными компонентами приложения. Таким образом, уровень представления не зависит от уровня обслуживания, и от него зависит только контроллер, даже если это связано с интерфейсами, а не с конкретной реализацией.
Вывод шаблона MVC
В этой статье мы узнали, как мы можем использовать шаблон проектирования MVC, чтобы подчеркнуть, что различные слои полностью разделены, и поэтому наши компоненты слабо связаны.
Шаблоны проектирования просто основаны на способе программирования и поэтому не зависят от языка и структуры. Не стесняйтесь оставлять свои мнения в комментариях ниже. Загрузите пример проекта MVC по ссылке ниже.
Ссылка: Википедия