Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 服务中的实体关系_Oop_Jpa_Design Patterns_Entity_Spring Rest - Fatal编程技术网

Oop 服务中的实体关系

Oop 服务中的实体关系,oop,jpa,design-patterns,entity,spring-rest,Oop,Jpa,Design Patterns,Entity,Spring Rest,我有这样的模型关系:用户,任务,每个用户都可以创建自己的任务,并且可以查看所有任务。所以很明显,我将使用带有方法的TaskService,getSortedTasks(字符串值),等等。 我不知道在哪里应该有createTask(Task Task),updateTask(lond id,Task Task)方法-在TaskService或UserService中,因为我被告知应该有REST API,看起来像: 相当于 post users/{id}/tasks 因为“任务属于特定用户”。因

我有这样的模型关系:用户任务,每个用户都可以创建自己的任务,并且可以查看所有任务。所以很明显,我将使用带有方法的TaskServicegetSortedTasks(字符串值),等等。 我不知道在哪里应该有createTask(Task Task)updateTask(lond id,Task Task)方法-在TaskServiceUserService中,因为我被告知应该有REST API,看起来像:

相当于

post users/{id}/tasks


因为“任务属于特定用户”。因此,我无法在单独的服务、每个实体的api和公共服务之间进行选择,api whreUser是关系所有者。

您应该实现在任务资源中创建任务的端点

两者皆有可能:

POST your_root.com/api/{userId}/tasks/--->创建任务并从uri中获取创建者的值

但你也可以这样做:

发布您的_root.com/api/tasks/-->在这种情况下,您必须通过JSON或XML告诉服务器是谁创建了任务。身体可能看起来像这样,即:

{

  "author": "user A",
  "assingee": null,
  "headline": "Login Page for my app",
  "text":"Build fancy login page"

}
最后一个变体和我的首选:

发布您的_root.com/api/{userId}/tasks/ 和身体里的作者:

{

  "authorId":"12"
  "author": "user A",
  "assingee": null,
  "headline": "Login Page for my app",
  "text":"Build fancy login page"

}
最后一个变量的优点是,您可以检查uri中的userId是否等于主体的authorId。因此,您可以避免此具有特定Id的请求是意外发出的


希望能有所帮助。

谢谢。那么,在最后一种情况下,我应该在UserService中也使用“createUserTask(id,task)”,还是可以在UserRestController中使用TaskService??我真的不太明白面向对象的原则“服务实体”案例。你能帮我吗?所有创建任务的服务都是任务服务的一部分。不要被与用户的关系弄糊涂了。您必须通过taskservice创建任务。taskservice还必须检查用户是否存在。如果这是真的,那么服务将创建任务。否则,您的服务将响应404-找不到用户。
{

  "authorId":"12"
  "author": "user A",
  "assingee": null,
  "headline": "Login Page for my app",
  "text":"Build fancy login page"

}