【发布时间】:2022-01-05 21:17:23
【问题描述】:
MVC 中的模型是否同时包含业务逻辑(算法和东西)和映射到数据库中实体表的类?那些映射的类也被称为模型,特别是因为它们对一些数据进行建模。我的困惑是:模型是否包含业务逻辑?还是只是实体?事实证明,它包含来自 Mozilla 文档:Model: Manages data and business logic.
我对 Java Spring 项目的结构感到困惑。有控制器、服务(业务逻辑)、存储库(连接到数据库,也称为 DAO)和模型类(控制器接收并通常映射到数据库实体的对象类)。让我们将其映射到 MVC“组件”:
查看 - 不在 spring 应用程序中;
Controller - Rest 控制器(或只是 Controller,取决于您希望如何构建应用程序);
模型 - 服务、存储库、模型类 (???)。
我很困惑,我们左右两边都有模型。
谢谢。
编辑:添加一个sn-p的代码,以及app的结构。
这是 Spring 应用程序通常的外观。大多数人都在做什么。
.
├── BasicSpringAppApplication.java
├── controller
│ └── CustomerController.java
├── model
│ └── Customer.java
├── repository
│ └── CustomerRepository.java
└── service
└── CustomerService.java
这是模型/实体在 java 文件中的样子:
package com.example.basicspringapp.model;
public class Customer {
private String id;
private String name;
private String surname;
private int age;
//constructors, getters, setters
}
看看我所说的(以及他们通常所说的)模型,只是一个特定的东西,一个实体。但在 MVC 中,它不仅如此!模型不仅包括实体,还包括服务和存储库,任何不是视图和控制器的东西。
为什么 MVC 模式在通常的 Spring 应用程序中被搞砸了?至少对我来说,这似乎搞砸了。为什么人们不将这些类称为实体或类似的东西?由于模型不止于此,对于 MVC。
【问题讨论】:
-
嗨。 “映射到数据库中的实体表的类”和“映射到数据库实体的对象的类”是什么意思?更准确地说,您所指的那些“实体表”和“数据库实体”是什么?一些代码也会有所帮助。
-
@dakis 嘿。你提到的事情是同一个意思。一个例子可以是
Customer,作为一个实体。如果您有一个保存客户列表和有关他们的信息的网站,Customer 将是 Java 中的模型类,其中将包含一些字段,如name、age、location等。在hibernate中我会将它声明为一个实体,在数据库中我会为它创建一个表,它会有一个id作为主键。 -
如果仍然不清楚我将这些实体类引用到什么,我可以提供一个示例作为代码。
-
customer.java 中你的类
Customer,如果它只有属性并且是你的底层持久层对象/表的表示,那么它通常被称为数据传输对象(DTO)。模型类包含存储和检索数据的逻辑,并且该数据被塑造/投影为 DTO。这样就不会出现您对两边都有模型的困惑。 -
Spring (ab) 使用著名的模式名称进行营销。这是一种有效的营销策略,但对开发社区造成了极大的伤害,因为它污染了我们的术语。将其与扩展 MVC 并部分重叠的所有不同风格结合起来,您就会发现一堆词只在孤立的上下文中始终如一地使用,但通常在不同的上下文中混为一谈。
标签: spring model-view-controller design-patterns