如何避免实施错误的领域概念

How to avoid implementation of a wrong domain concept

我们的应用程序中有以下概念(由 UI 和 REST 后端组成):

Container is-a-parent-of lineItems

a lineItem 不能在没有有效 Container 的情况下创建,并且这两个实体都通过 spring 数据持久保存在数据库中。

UI 分两页列出 lineItem

对于这两个 UI 页面,我们都有单一数据源。数据来自一个通用的 REST 后端,其中 returns 包含在 POJOview object 中的 lineItem 列表(以及其他信息)- 当前状态。

需要更改 - 在搜索页面上,现在,我们需要显示 lineItemContainer 中的一些信息。因此,现在我们需要在搜索页面上提供与 lineItem 关联的 Container 的数据。我们目前正在讨论两种可能的方法:

方法一: POJOview { List<LineItem> List<Container> }

方法二: POJOview { List<LineItem> //insert Container of a lineItem as a member variable in the lineItem itself. Container instance is annotated with @Transient to avoid persistence in DB. }

问题是,尽管存在所有这些事实,但我的同事仍然认为方法 2 是最佳方法,因为它是一种快速修复方法,而且他认为没有任何问题。我在这里遗漏了什么吗?

根据我的意见,一种好的实施方式如下:

REST 服务可以return 以下格式的数据:

a) LineItem object 的列表,其中每个 LineItem object 仅包含其容器的 ID(注意:这不是错误的方法,因为 child [=只要 parent 数据不在每个 child 中重复,32=]s 就可以很好地包含对其 parent 的引用。

b) 容器列表objects。显然,只有那些被行项目引用的容器才应该被 returned。

前端逻辑可以遍历行项目列表并在容器列表中查找容器详细信息。

数据项a)和b)可以通过单独调用或单个调用来发送。理想情况下,如果要严格遵循 REST 原则并且进行两次调用不会影响性能,则应进行两次单独的调用,因此根据 REST 原则,在一次调用中检索 LineItem 资源,在另一次调用中检索容器资源。

通过使用这种方法,容器信息不会重复,只有容器 ID 在行项目 object 中重复,这在大多数情况下应该没问题。

因此,此方法与您描述的方法 1) 基本相似,不同之处在于行项目可以包含其 parents(容器)的 ID。

据我了解,问题中提到的方法 2 为每个 lineitem object 重复了完整的容器信息,这肯定是错误的。 ID 可以重复但不能是完整的 object 无论数据是从数据库中检索还是在后端传递还是发送到前端。

希望这能提供一些清晰度。