参数通过远程会话 bean 传递到 DTO/DAO 服务后端
Posted
技术标签:
【中文标题】参数通过远程会话 bean 传递到 DTO/DAO 服务后端【英文标题】:Parameter passing through remote session bean to DTO/DAO service backend 【发布时间】:2013-08-15 00:23:12 【问题描述】:我对在 JavaEE 上进行开发还比较陌生。我想知道将参数传递到会话 bean 以进行对象创建或删除调用的最佳格式是什么。
对于我的后端,我使用带有 DAO 的 DTO 在数据库上运行创建、更新、删除和读取操作
public class BusinessObject
public String name;
public int id;
// Assume constructor to init these 2 fields.
我有一个简单的 DAO 接口:
public interface BusinessDAO
public void createBusinessObject(BusinessObject bo);
public void deleteBusinessObject(BusinessObject bo);
public void updateBusinessObject(BusinessObject bo);
public void findBusinessObject(BusinessObject bo);
(我相信现阶段BusinessDAO
的实现是无关紧要的)
继续我的实际问题 - 如果我有一个远程(无状态会话 bean)EJB 接口,我是否应该在远程 EJB 接口中定义一个方法:
public void addBusinessObject(String name, int id);
或者类似的东西:
public void addBusinessObject(BusinessObject bo);
我有一个简单的客户端程序可以调用这些方法中的任何一个。
我的想法是,对于对象创建,BusinessObject bo
定义会更好地工作,但是我似乎认为远程界面中的其他定义可以遵循一种模式。
我不明白如何为findObject(BusinessObject bo)
之类的东西合并相同样式的方法定义
标准做法是创建BusinessObject
并仅提供该对象中的 ID 字段,然后 DAO 实现将填充的对象返回给客户端(通过会话 bean)?
还是将int id
传递给findObject
方法并只返回BusinessObject
更好?
【问题讨论】:
就像其他任何方法一样;将适当的输入传递给方法,并从方法返回适当的输出。findById()
应该将 ID 作为参数。将 BusinessObject 传递给这样的方法是没有意义的。
【参考方案1】:
至于findObject()
:只需传递ID即可。您正在设计一个远程界面。无论如何,如果您的 DTO 有很多字段,这会浪费带宽。
至于addBusinessObject()
:通过DTO。如果您的 DTO 中有大量字段,这会更好地“扩展”:如果您添加/删除字段,它将简化以后的维护。
另一方面,如果您有 changeOneFieldOnly()
之类的东西,您可以传递 ID
和新值(而不是完整的 DTO)。特别是在远程接口的情况下,根据用例定制您的方法(根据经验:对于每个用户操作,只有一次调用 remote 服务层)。
所以从用例的角度来看一下您的远程界面(而不是创建/添加/删除)。
【讨论】:
以上是关于参数通过远程会话 bean 传递到 DTO/DAO 服务后端的主要内容,如果未能解决你的问题,请参考以下文章
迁移到 tomcat 后,将枚举值作为参数从 JSF 页面传递给 bean 方法失败
在MVC开发模式下DTO,DAO,Servlet,Jsp的作用?