我目前正在研究 SOA 中的前端解决方案,并且在保存域对象时遇到了麻烦。
后端给了我相当大的域对象,它们也被保存为一个整体。另一端的前端将这些数据拆分为多个页面和子页面。
在分享我的实际问题之前,我想提供一些背景信息:
我们系统中的大多数任务都是自动化的,使用流程引擎、与 Web 服务对话和规则引擎。只有当输入数据不正确时才需要前端,以便人们需要更正它。前端的输入由 web 服务保存,当用户认为一切正确时,他将域对象传递回流程引擎。
即将出现的问题的简单示例
域对象(基本上是根实体)
- 显示在页面 A 上的实体 1(以及来自根实体的一些字段)
- 实体 2 显示在页面 B
该过程识别每个实体中的错误并标记它们。给用户一个任务,前端加载域对象,显示页面 A。用户更正字段,当他移动到页面 B 时,应该保存输入,这样他已经完成的工作不会丢失。
问题:
负责保存域对象的 web 服务将抛出 ValidationException 因为实体 2 仍然有错误。您可能想知道最初是如何保存不正确的数据的?好吧,Web 服务公开了两种保存服务,一种称为“自动”,一种称为“手动”。操作 automaticSave 允许无效数据,因为流程引擎为返回的每个错误创建标记。manualSave 当前不允许出错。
我正在寻找如何解决这个问题的建议。
我认为这应该是 SOA 中一个相当普遍的问题。如果我错了,请纠正我:-)
一种方法是前端中的数据仅存储在会话中,用户必须修复所有错误才能持续存在,但在可用性方面我认为这不是最好的主意。
另一个想法可能是在后端进行部分验证,但这为输入错误数据打开了大门
我的最后一个想法是将流程引擎标记的错误传递给 manualSave,以便 web 服务知道“嘿,这个字段之前有错误,所以当只有这个无效时我不会抛出 ValidationException”
我期待着你的想法。
[更新] 在初始答案之后,我更新了域对象的结构。似乎这个问题可以扩展到“如何设计一个好的网络服务” :-)