我正在与一位同事一起进行一个项目,他告诉我在创建休息服务时应该创建3个级别。任何人都可以向我解释这是否是“正常”情况,以及我是否以正确的方式使用它?他从不向我解释原因,并在几周后离开公司。
第一级:资源
我想这是您捕获请求(GET,POST,PUT等)的地方
第二级:服务
在这里进行计算是否有意义?
第三级:存储库
他在这里放置了所有与 数据库。
例如假设我们有一个实体“ Employee”,其属性为“ level”。根据您的水平,您会获得不同的奖金。我们要计算奖金并通过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();
}
答案 0 :(得分:4)
在您的情况下,这称为分层体系结构
控制器,负责处理请求
@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;
存储库,就像您所说的This is where he put all the statements that connect with the Database.
public int findLevelById(long id) {
return getEntityManager().createNamedQuery("Employee.findLevelById").setParameter("id", id).getSingleResult();
}
答案 1 :(得分:2)
是的,Matthijs,这很正常。在构建任何与Web服务相关的项目时,人们喜欢的是不同的分离“层”。即 layer architecture
控制器:-您的请求到达的地方。
@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();
}
这些是人们通常遵循的一些标准,但是可能会有更多的隔离层。