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 价值对象中的业务验证是否可接受?_Design Patterns_Enterprise_Paradigms - Fatal编程技术网

Design patterns 价值对象中的业务验证是否可接受?

Design patterns 价值对象中的业务验证是否可接受?,design-patterns,enterprise,paradigms,Design Patterns,Enterprise,Paradigms,我们有一个多租户应用程序,不管是好是坏,它处理不同客户之间的区别,到处都是if-then-else语句。我有一个特别简单的验证,需要对数据输入执行,类似于以下场景: 假设我们有一个名为温度计的对象,其属性名为温度。当用户输入一个数字时,我们需要将其四舍五入到最接近的小数点后三位。因此,如果他们输入“65.65432”,我们需要存储“65.654”。但是等等,还有更多。客户Bob喜欢细节,不希望数字四舍五入。客户Sarah是要求四舍五入的人 如何做到这一点很简单,但在哪里做到这一点是我的问题。我想

我们有一个多租户应用程序,不管是好是坏,它处理不同客户之间的区别,到处都是if-then-else语句。我有一个特别简单的验证,需要对数据输入执行,类似于以下场景:

假设我们有一个名为
温度计
的对象,其属性名为
温度
。当用户输入一个数字时,我们需要将其四舍五入到最接近的小数点后三位。因此,如果他们输入“65.65432”,我们需要存储“65.654”。但是等等,还有更多。客户Bob喜欢细节,不希望数字四舍五入。客户Sarah是要求四舍五入的人

如何做到这一点很简单,但在哪里做到这一点是我的问题。我想直接在value对象上执行此操作,
温度计
,因为它快速、简单,而且看起来很正确。但是,由于只有一个客户机请求它,因此这属于“业务逻辑/验证”领域。将它放在值对象上仍然可以接受吗,还是我应该将其吸收并在表示层中构建它?要做到这一点,需要将访问器包装在处理UI的托管bean中的代理方法中。哪种选择有更好的回报

更多详细信息

对于任何感兴趣的人来说,这是一个带有JSF的J2EE应用程序。我们通常能够使用
,但在这种情况下,我们也使用了
,这似乎破坏了数字转换器。因此,我们必须手动进行取整。

当然,您希望在不同的类中建模不同的需求,这些类可以根据客户机插入。有点像战略。这样,您就可以独立地对每一个进行单元测试,并保持良好的低耦合。

我赞成尽可能多地在UI中执行验证。Well,您现在如何区分客户端?用户会话?配置文件?我会用这些,但我不知道你是否能。问题不是如何区分客户。这是微不足道的,因为我们一直在做。在本讨论中,假设我们有一个函数
isUserSarah()
。在我试图解决的实际问题中,我可以从嵌套属性获取客户机。注意:我没有在这个问题中添加JSF标记,因为它不是JSF特有的,JSF的使用也不会影响解决方案。“更多细节”只是为了排除“让您的表示框架来处理它”的答案,它实际上强化了JSF在这里是不相关的。