【发布时间】:2010-06-11 14:05:47
【问题描述】:
为什么人们说业务逻辑应该在服务器端代码(例如 EJB)而不是客户端应用程序代码上实现?
我想到的示例是在基于 EJB 的体系结构上的业务对象验证。它真的必须委托给 EJB 还是可以在将对象发送到服务器进行保存之前在客户端上运行它?
【问题讨论】:
标签: java architecture jakarta-ee ejb business-logic
为什么人们说业务逻辑应该在服务器端代码(例如 EJB)而不是客户端应用程序代码上实现?
我想到的示例是在基于 EJB 的体系结构上的业务对象验证。它真的必须委托给 EJB 还是可以在将对象发送到服务器进行保存之前在客户端上运行它?
【问题讨论】:
标签: java architecture jakarta-ee ejb business-logic
验证可以在客户端完成,以节省到服务器的往返行程。但是服务器也应该执行相同的验证。理想情况下,您可以在客户端和服务器端重用相同的类。
【讨论】:
有两个原因。首先,您可能对多个客户端拥有相同的业务逻辑,因此将其分解到服务器是有意义的。其次,您很可能无法信任客户端,这意味着服务器验证是必不可少的。
【讨论】:
为什么人们说业务逻辑应该在服务器端代码(例如 EJB)而不是客户端应用程序代码上实现?
这是我们从客户端/服务器(胖客户端)架构中学到的东西。使用这样的架构,您必须重新部署所有客户端来更改某些内容,这很痛苦。服务器端应用程序和集中部署(使用瘦客户端或富客户端)没有这个问题,因此是首选。
我想到的示例是在基于 EJB 的体系结构上的业务对象验证。它真的必须委托给 EJB 还是可以在将对象发送到服务器以保存之前在客户端上运行它?
验证是您必须在服务器端执行的事情(“不信任客户端”),可以也可以在客户端执行以避免一轮旅行。我什至没有提到多个客户端(GUI、命令行应用程序、批处理等)的情况。
【讨论】:
因为通常客户端代码用于显示信息,而不是真正定义应用程序的功能。
主要是因为这使您可以灵活地添加其他客户端,而无需执行奇怪的技巧(例如复制/粘贴)
例如,假设您的客户端使用 HTML,稍后您想使用 json 添加新客户端。
如果业务规则在客户端,您必须将它们复制到新客户端。
现在,不要对验证规则和其他内容感到困惑。这些也必须放在客户端。
【讨论】: