Spring中的包结构,实体与模型与控制器

时间:2017-03-22 08:25:14

标签: java spring spring-mvc spring-boot

如何定义MVC中的模型或实体?

我的大多数Spring代码都有像他这样的包结构: http://www.mkyong.com/spring-mvc/spring-mvc-form-handling-example/

我有我的观点,我的控制器,我的道和"模型"对于dao

但我尝试学习百里香,发现了这个: https://github.com/thymeleaf/thymeleafexamples-stsm

没有"模型"包,他称之为实体,它是一个实体但是......

然后我想......哦等一下...... entiy和模特的定义是什么? 类似这个问题: Entity vs Model vs View Model

所以 什么是你的包结构,你称之为模型还是实体? 你有春季项目的包名/结构的例子吗?

3 个答案:

答案 0 :(得分:6)

从字面上看,Model是一个代表POJO的类。 Entity - 与DB有关。

有时它们混合在一起,如:

package net.lelyak.edu.entity;

@Entity
public class User extends BaseEntity {
// fields + get/set 

结构取决于您的项目或团队的惯例。

如果是您的个人项目,您可以完全决定要遵循的包结构。

以下是我为春训做的一些方法:

enter image description here

但是,出于您自己的目的,您可以完全决定如何管理包,以下也是合法的:

enter image description here

主要思想是没有严格的边界。

对于个人项目,它必须为您提供便利 当你在同一个项目上与其他人合作时,你必须同意它。

答案 1 :(得分:3)

我的Spring项目大多数都有如下所示的包结构。此结构是daoservicesimplementationsviewutil的基础结构。当然,结构可以改变,所有这些都取决于你必须发展的东西。

com.companyName.appName.config -> 
I use config for my classes which are annotated with @Configuration.

com.companyName.appName.dao.model -> 
I use dao.model for all my entities from the DB.

com.companyName.appName.dao.repository -> 
I use dao.repository for all the repositories used with spring-data-jpa.

com.companyName.appName.dao.repository.impl -> 
I use dao.repository.impl for all customized implementations of repositories. 
For example to autowire the entityManager.

com.companyName.appName.service -> 
I use service for all my service interfaces

com.companyName.appName.service.impl -> 
I use service.impl for all my implementations of services

com.companyName.appName.controller -> 
I use controller for all my controllers.

com.companyName.appName.view.model -> 
I use view.model for all my frontend specific models which are no enitites.

com.companyName.appName.view.form -> 
I use view.form for all my frontend specific forms which has to be submitted and validated.

com.companyName.appName.util -> 
I use util for utility stuff.

我希望这能简要介绍一下我如何为spring-boot应用程序构建软件包。但每个人都喜欢自己的命名。所以很难使它变得一般。

答案 2 :(得分:0)

在我的项目中,我喜欢简单地DAOsdata调用entity个对象,并且在您调用它们的情况下应该将对象返回到用户界面presentation {{ 1}}。我这样做主要是因为在很长一段时间内已经使用了thymeleaf + Spring-Boot,这使旧时尚model术语变得冗余:

  • modelcom.company.appName.data
  • com.company.appName.entity

但是对于结构更复杂的大型项目,有时com.company.appName.presentation可以与业务逻辑放在一起:

  • presentationcom.company.appName.data
  • com.company.appName.entity
    • com.company.appName.account - 业务逻辑
    • com.company.appName.account.service - 用户界面数据对象