Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 使用JavaEE设计客户端-服务器错误列表的传输_Design Patterns_Jakarta Ee - Fatal编程技术网

Design patterns 使用JavaEE设计客户端-服务器错误列表的传输

Design patterns 使用JavaEE设计客户端-服务器错误列表的传输,design-patterns,jakarta-ee,Design Patterns,Jakarta Ee,当在服务器端调用一个方法时,如果某些参数有问题,我可以得到一个错误或警告列表,或者如果一切正常,我可以得到一个正确的答案 例如,我将在客户端定义的对象发送到服务器,在服务器上我有逻辑验证该对象是否正常,因此我可以将与对象定义相关的错误和警告列表返回给客户端,以便客户端能够正确地更正它们,或者,如果验证通过,说一切都很好 可能的解决方案:我可以返回错误列表,因此,当一切正常时,列表为空,当我遇到一些错误或警告时,我可以处理它们并将它们显示给用户 这种方法正确吗?有没有更好的设计模式?我的背景是客户

当在服务器端调用一个方法时,如果某些参数有问题,我可以得到一个错误或警告列表,或者如果一切正常,我可以得到一个正确的答案

例如,我将在客户端定义的对象发送到服务器,在服务器上我有逻辑验证该对象是否正常,因此我可以将与对象定义相关的错误和警告列表返回给客户端,以便客户端能够正确地更正它们,或者,如果验证通过,说一切都很好

可能的解决方案:我可以返回错误列表,因此,当一切正常时,列表为空,当我遇到一些错误或警告时,我可以处理它们并将它们显示给用户


这种方法正确吗?有没有更好的设计模式?我的背景是客户机-服务器体系结构,我将使用从客户端调用的EJB来设计通信。

如果客户机能够向EJB发送对象,那么它可能是用Java编写的客户机。因此,它实际上是一个调用EJB方法的丰富表示层。如果是这样,那么验证应该在这个表示层IMO中完成

为了自身的安全,服务器可能需要添加一个额外的验证层,但在这种情况下,由于方法的契约是定义良好的,表示层应该验证对象并遵守契约,因此我只会在发现第一个错误时抛出一个运行时异常

如果您真的想在服务器端执行验证,我将使用选中的
ValidationException
来显示错误列表。此异常可能包含消息列表,或包含具有关联参数值的消息键列表。这将取决于国际化(i18n)的必要性,以及谁负责i18n消息


警告也可以放在此异常中(然后消息将与标志或枚举相关联)。如果客户端使用
ignoreWarnings=false
调用该方法,则警告存储在异常中,并引发异常。如果调用方法时使用
ignoreWarnings=true
,则警告将被忽略,只有错误才会引发异常。

没错,客户端是用Java编写的。验证几乎不涉及已经定义的对象的修订,以避免名称重复。所以我不认为服务器端存在明显的分歧,尽管ValidationException的想法是一个好主意。我也喜欢警告的想法,谢谢。如果一些验证规则只能由服务器完成,而不能由表示层完成,那么对该规则使用ValidationException,或者使用特殊异常(因为在大多数情况下,您可能只有一条规则需要在服务器端进行检查,否则违反规则的情况将非常罕见,以至于第一次出现问题就失败的方法是可以接受的)。是的,似乎是合适的。如果每次验证都在服务器端完成,您是否会保留通知警告和错误的方式?当然,将每个错误都包含在例外范围内。如果每次验证都在EJB层完成,我将使用我回答的最后两段中的设计。您是对的,始终存在:)谢谢JB,这是我在设计时没有考虑的一个观点,在定义客户端和服务器端职责之后,我将使用您的一些想法。