我们的应用程序(由UI和REST后端组成)具有以下概念:
Container
是lineItem
的父母
没有有效的lineItem
,就无法创建Container
,并且这两个实体都通过spring数据保存在DB中。
用户界面在两页中列出了lineItem
列表视图:显示单个lineItem
的{{1}}
搜索页面:显示Container
个不同的lineItem
个
这两个UI页面都有一个数据源。数据来自公共REST后端,该后端返回包装在POJOview对象中的Container
列表(以及其他信息)-当前状态。
需要更改-现在,在搜索页面上,我们需要显示lineItem
中Container
的一些信息。因此,现在我们需要在搜索页面上提供与lineItem
关联的Container
的数据。我们目前正在讨论两种可行的方法:
方法1:
lineItem
POJOview {
List<LineItem>
List<Container>
}
和List<LineItem>
分别发送,因此较少的数据被传输到UI。如果发送了20个属于1 List<Container>
的{{1}},则与方法2中的lineItem
的20个对象相比,Container
仅有一个对象。Container
映射到其他列表中的Container
方法2:
lineItem
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.
}
,这与域概念相反(lineItem
是{ {1}} s,因此它不直观,并且使代码难以理解和维护。Container
现在包含Container
,因此,如果页面上有20个lineItem
属于同一lineItem
,则Container
数据现在lineItem
的一部分被加载了20次(性能受到影响)问题是,尽管有所有这些事实,我的同事仍然认为方法2是最佳方法,因为它是一种快速修复方法,并且他认为其中没有错误。我在这里想念东西吗?
答案 0 :(得分:0)
根据我的观点,实施的一种好方法如下:
REST服务可以以下格式返回数据:
a)LineItem对象的列表,其中每个LineItem对象仅包含其容器的ID(注意:这不是错误的方法,因为只要父数据是子对象,子对象就可以很好地包含对其父对象的引用不会在每个孩子中重复)。
b)容器对象列表。显然,仅应返回订单项引用的那些容器。
前端逻辑可以遍历订单项列表,并在容器列表中查找容器详细信息。
可以通过单独的呼叫或单个呼叫发送数据项a)和b)。理想情况下,如果严格遵循REST原则并且进行两次调用不会影响性能,则应该进行两次单独的调用,因此,按照REST原则,在一个调用中检索LineItem资源,在另一个调用中检索容器资源。
通过这种方法,容器信息不会重复,仅在订单项对象中重复容器ID,这在大多数情况下是可以的。
因此,此方法与您所描述的方法1)基本相似,不同之处在于,行项目可以包含其父代(容器)的ID。
据我了解,问题中提到的方法2重复了每个lineitem对象的完整容器信息,这肯定是错误的。无论是从数据库中检索数据还是在后端传递数据,还是将其发送到前端,都可以重复ID,但不能重复完整对象。
希望这可以提供一些清晰度。