Java REST服务项目结构

Java REST服务项目结构,java,spring-boot,package-structuring,Java,Spring Boot,Package Structuring,我和一位同事在做一个项目,他告诉我在创建rest服务时应该创建3个级别。有人能解释一下这是否是“正常”的,以及我是否以正确的方式使用它吗?他从未向我解释过原因,几周后就离开了公司 第一级:资源 我想这就是你捕捉请求获取、发布、放置等的地方 第二级:服务 我能理解这里发生的计算吗 第三级:存储库 public double findBonusById(long id) { int level = employeeRepository.findLevelById(id); double initia

我和一位同事在做一个项目,他告诉我在创建rest服务时应该创建3个级别。有人能解释一下这是否是“正常”的,以及我是否以正确的方式使用它吗?他从未向我解释过原因,几周后就离开了公司

第一级:资源

我想这就是你捕捉请求获取、发布、放置等的地方

第二级:服务

我能理解这里发生的计算吗

第三级:存储库

public double findBonusById(long id) {
int level = employeeRepository.findLevelById(id);
double initialBonus = 2563;
return level * initialBonus;
}
这就是他把所有与 数据库

e、 g.假设我们有一个属性为“级别”的实体“员工”。根据你的级别,你会得到不同的奖金。我们想计算奖金并通过REST服务返还

资源方法的外观如下所示:

@GET
@Path("/id/{id}")
@Produces(MediaType.APPLICATION_JSON)
public double findBonusById(@PathParam("id") long id) {
    return employeeService.findBonusById(id);
}
public double findBonusById(long id) {
    int level = employeeRepository.findLevelById(id);
    double initialBonus = 2563;
    return level * initialBonus;
}
public int findLevelById(long id) {
    return getEntityManager().createNamedQuery("Employee.findLevelById").setParameter("id", id).getSingleResult();
}
服务方法将如下所示:

@GET
@Path("/id/{id}")
@Produces(MediaType.APPLICATION_JSON)
public double findBonusById(@PathParam("id") long id) {
    return employeeService.findBonusById(id);
}
public double findBonusById(long id) {
    int level = employeeRepository.findLevelById(id);
    double initialBonus = 2563;
    return level * initialBonus;
}
public int findLevelById(long id) {
    return getEntityManager().createNamedQuery("Employee.findLevelById").setParameter("id", id).getSingleResult();
}
存储库方法的外观如下所示:

@GET
@Path("/id/{id}")
@Produces(MediaType.APPLICATION_JSON)
public double findBonusById(@PathParam("id") long id) {
    return employeeService.findBonusById(id);
}
public double findBonusById(long id) {
    int level = employeeRepository.findLevelById(id);
    double initialBonus = 2563;
    return level * initialBonus;
}
public int findLevelById(long id) {
    return getEntityManager().createNamedQuery("Employee.findLevelById").setParameter("id", id).getSingleResult();
}

在你的例子中,这就是所谓的分层架构

处理请求的控制器

@GET
@Path("/id/{id}")
@Produces(MediaType.APPLICATION_JSON)
public double findBonusById(@PathParam("id") long id) {
return employeeService.findBonusById(id);
}
服务是控制器和存储库之间的通信层

public double findBonusById(long id) {
int level = employeeRepository.findLevelById(id);
double initialBonus = 2563;
return level * initialBonus;
}
业务层是可选的,取决于需求,您可以将所有业务逻辑都放在这一层中

double initialBonus = 2563;
return level * initialBonus;
存储库正如您所说,这是他放置所有与数据库连接的语句的地方


在你的例子中,这就是所谓的分层架构

处理请求的控制器

@GET
@Path("/id/{id}")
@Produces(MediaType.APPLICATION_JSON)
public double findBonusById(@PathParam("id") long id) {
return employeeService.findBonusById(id);
}
服务是控制器和存储库之间的通信层

public double findBonusById(long id) {
int level = employeeRepository.findLevelById(id);
double initialBonus = 2563;
return level * initialBonus;
}
业务层是可选的,取决于需求,您可以将所有业务逻辑都放在这一层中

double initialBonus = 2563;
return level * initialBonus;
存储库正如您所说,这是他放置所有与数据库连接的语句的地方


是的,Matthijs,这很正常。在构建任何与Web服务相关的项目时,人们更喜欢的是不同的分离层。即

控制员:-您的请求到达的地方

@得到 @路径/id/{id} @ProducesMediaType.APPLICATION_JSON 公共双人房findBonusById@PathParamid长id{ return employeeService.findbonusbydid; }

服务:-执行业务逻辑的地方

公共双findbonusbydlong id{ int level=employeeRepository.findLevelByIdid; 双倍初始奖金=2563; 回报水平*初始奖金; }

存储库:-与数据库通信的位置

public int findLevelByIdlong id{ 返回getEntityManager.createNamedQueryEmployee.findLevelById.setParameterid,id.getSingleResult; }


这些是人们通常遵循的一些标准,但是可以有更多的分离层。

是的,Matthijs,这是正常的。在构建任何与Web服务相关的项目时,人们更喜欢的是不同的分离层。即

控制员:-您的请求到达的地方

@得到 @路径/id/{id} @ProducesMediaType.APPLICATION_JSON 公共双人房findBonusById@PathParamid长id{ return employeeService.findbonusbydid; }

服务:-执行业务逻辑的地方

公共双findbonusbydlong id{ int level=employeeRepository.findLevelByIdid; 双倍初始奖金=2563; 回报水平*初始奖金; }

存储库:-与数据库通信的位置

public int findLevelByIdlong id{ 返回getEntityManager.createNamedQueryEmployee.findLevelById.setParameterid,id.getSingleResult; }


这些是人们通常遵循的一些标准,但是可以有更多的分离层。

适合你的级别的术语是。适合你的级别的术语是。你能解释一个业务层有用的场景吗?它似乎与服务层的作用相同。如果您有庞大的业务场景,则假设您有2000个业务记录的列表,并且需要通过基于数据对每个对象进行分组来对其执行不同的操作。在这种情况下,您在哪里执行该操作?在服务层让它变得一团糟?你能解释一个场景吗,在这个场景中,业务层会很有用?它似乎与服务层的作用相同。如果您有庞大的业务场景,则假设您有2000个业务记录的列表,并且需要通过基于数据对每个对象进行分组来对其执行不同的操作。在这种情况下,您在哪里执行该操作?在服务层让它变得一团糟?