如何在 API 开始时在数据库中插入域对象

How to go about inserting domain objects in db at start of API

我正在 java 中使用球衣和码头构建 REST API。我有一个复杂的域,其中有一个 class(Workers)。我希望能够通过 POST 动态添加工作人员。但是,业务逻辑要求我有一些具有固定值的默认工作人员。所以在 API 开始时,我需要将它们添加到我的数据库中(现在它在内存中)。就干净代码而言,最好的方法是什么?

我考虑过用这些默认工作人员初始化我的存储库,但我觉得它违反了 WorkerRepo class 的 SRP,我觉得这应该是应用程序层的工作,因为它特定于此应用程序,而不是域,如果这有意义的话。我应该把这个初始化的逻辑移到哪里?谢谢!

经过一番思考,我将设置移到了 应用层 ,我实际上在其中实例化了所有依赖项(在名为 ApplicationContext 的 class 中)。

我创建了一个接口 WorkerContext 并创建了一个具体的实现 WorkerContextX,其中 X = NAMEOFTHEAPP。此上下文 class 包含所有默认值,并使用注入的 repo 将这些默认值添加到 repo。因此,在 API 启动时,在 ApplicationContext class 中,我调用了设置我的 workerRepo 的 WorkerContext 方法。

这样一来,我可以轻松地在眨眼之间更改设置策略,并且它不再违反 repo 中的 SRP。我现在尊重 DIP,因为 repo(在域中)不依赖于应用层指定的东西。

我发布这个是因为我认为这是一个不错的解决方案并且可以帮助其他人,请随时批评或改进这个解决方案。

从我的角度来看,我会像设计所有其他用例一样设计您的需求。例如。 SetupWorkerInteractor.

我会使用封装了应用程序启动逻辑的 ApplicationRunner。例如。解析命令行参数,构建应用程序上下文,调用初始化过程和 运行 应用程序。当然,我也会将这些方面分成不同的 类,但我想你明白我的意思了。

在我的例子中,我将使用 ApplicationLog 作为设置用例输出的“演示者”。

为简单起见,我省略了实体和 request/response 模型。

如果我这样做,那么 SetupWorkerInputBoundary 是从 ApplicationRunnerRestService 还是例如一个消息系统。我还可以像任何其他用例一样测试设置。