在我的工作中,我们目前正在为web应用程序中的uuid生成方法而奋斗。我们使用DDD,我们的持久存储是我们拥有的远程API。
下面是我的代码的简化示例:
class HireFooHandler() {
private $repository;
private $mailer;
public function __construct(FooRepository $repository, HiringMailer $mailer, ... ) {
$this->repository = $repository; //behind the repository, there are api calls
$this->mailer = $mailer;
...
}
public function handle(HireFooCommand $command) {
try {
$foo = new Foo($command->uuid, $command->baz, ...);
$this->repository->hire($foo);
$this->mailer->sendHiredMail($foo);
...
} catch(...) {
...
}
}
}我的一些同事不适合生成应用程序并将uuid发送到api。他们更喜欢让服务器端处理uuid生成,如果在这个示例中保存了"foo“,则将生成的uuid发回给响应中的应用程序。主要的论点是,api也是公开的,他们不希望客户端生成uuid。
另一方面,从我的应用程序和编码的角度来看,由于我的实体Foo不应该处于无效状态,要创建它,我必须提供uuid并因此从客户端生成它,这是可以的。
,所以我在这里,挣扎于此,不知道什么是最好的方法,以及在哪里生成我的uuid?客户端?服务器端?
我建议它们通过在post端点中添加一个可以验证的uuid可选字段来使api更加灵活。因此,Api可以从客户端接收一个uuid,如果没有,则生成它自己的uuid。但我不确定这是个好做法。
如果有人有一些输入,我很乐意读到:)
发布于 2021-09-13 18:51:47
您应该理解为什么在客户端生成uuid很好,对我来说最大的好处是允许做异步或复杂的事情。例如,客户端可以向服务器发送请求,而无需等待响应,并开始使用生成的uuid,这种方法允许客户机在开始使用uuid而不是dd时从uuid和php应用程序中获得很多好处,因为您不再需要并且可以发送事件。此外,还有一种中间解决方案,在创建命令时在控制器中生成uuid。还有更有趣的概念:命令从未失败。
https://stackoverflow.com/questions/68087043
复制相似问题