我们的Hybris实例有一些自定义的RESTAPI,例如addEntry。这个版本的API在有效负载中需要一个额外的布尔参数,让我们将其称为fooBar。这里有一个有效载荷的例子:
{"quantity": 1, "product": {"code": "1234567"}, "fooBar": false}
以下是我们所做的工作列表,以便在实际进行http调用的服务中有这个额外的参数:
- 重写AddToCartComponent
- 修改了将fooBar参数传递给E2MultiCartService的addEntry方法的addEntry
- 中的MultiCartService修改了addEntry方法,该方法将fooBar参数传递到E2CartAddEntry
- 创建了第二个名为processesIncrement$的效果,用于调度CartActions.CartProcessesIncrement操作(我们这样做是因为E2CartAddEntry无法扩展EntityProcessesIncreamentAction类(
- 复制了原始CartEntryEffects中的addEntry$效果,并将fooBar参数添加到E2CartEntryConnector的add方法
- 中扩展CartEntryCnnector修改了add方法,该方法将fooBar参数传递到E2CartEntryAdapter的add方法
- 中扩展了CartEntryAdapter修改了抽象的add方法,添加了fooBar参数
- 修改add方法,将fooBar添加到HttpClient发出的POST调用的有效负载
[
{ provide: ActiveCartService, useClass: E2ActiveCartService },
{ provide: MultiCartService, useClass: E2MultiCartService },
E2CartEntryEffects,
{ provide: CartEntryConnector, useClass: E2CartEntryConnector },
{ provide: E2CartEntryAdapter, useClass: E2OccCartEntryAdapter },
]
这个解决方案似乎有效,但我们认为对于相对简单的更改来说,这相当复杂,我们想知道我们的方法是否正确,或者是否有更好、更清洁的方法。
问候
目前,这似乎是这个特定用例的正确方式。
您没有确切地指定fooBar
的用途,但我认为,它已被使用,并且可以在顶层(UI组件中(内切换,并且必须由所有其他层向下传递到适配器。
另一方面,例如,如果fooBar
只是Product
模型的一个属性,那么这将是一个只扩展"产品"模型+重要位置(组件、适配器(的更改的问题,所有其他位置都可以保持不变(只通过扩展模型(。
你能提供更多关于所需更改的上下文吗,这样我们就能更好地理解它,并在未来更容易?
在不久的将来,我们正在考虑通过Spartacus中的所有层统一我们的facade服务的有效负载,因此向任何核心逻辑添加更多上下文将大大简化(基本上可以归结为第二个示例,关于扩展Product
模型(。