如何定义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
所以 什么是你的包结构,你称之为模型还是实体? 你有春季项目的包名/结构的例子吗?
答案 0 :(得分:6)
从字面上看,Model
是一个代表POJO的类。 Entity
- 与DB有关。
有时它们混合在一起,如:
package net.lelyak.edu.entity;
@Entity
public class User extends BaseEntity {
// fields + get/set
结构取决于您的项目或团队的惯例。
如果是您的个人项目,您可以完全决定要遵循的包结构。
以下是我为春训做的一些方法:
但是,出于您自己的目的,您可以完全决定如何管理包,以下也是合法的:
主要思想是没有严格的边界。
对于个人项目,它必须为您提供便利 当你在同一个项目上与其他人合作时,你必须同意它。
答案 1 :(得分:3)
我的Spring项目大多数都有如下所示的包结构。此结构是dao
,services
,implementations
,view
和util
的基础结构。当然,结构可以改变,所有这些都取决于你必须发展的东西。
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)
在我的项目中,我喜欢简单地DAOs
或data
调用entity
个对象,并且在您调用它们的情况下应该将对象返回到用户界面presentation
{{ 1}}。我这样做主要是因为在很长一段时间内已经使用了thymeleaf + Spring-Boot,这使旧时尚model
术语变得冗余:
model
或com.company.appName.data
com.company.appName.entity
但是对于结构更复杂的大型项目,有时com.company.appName.presentation
可以与业务逻辑放在一起:
presentation
或com.company.appName.data
com.company.appName.entity
com.company.appName.account
- 业务逻辑com.company.appName.account.service
- 用户界面数据对象