参数通过远程会话 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 方法失败

DTO、DAO 和实体?是实体需要吗?那三个的最佳实践?

DTO DAO POCO BO

在MVC开发模式下DTO,DAO,Servlet,Jsp的作用?

使用 Spring Boot 代替 DTO、Dao、Service 的设计模式? [关闭]

Jenkins 远程参数化构建始终使用默认参数值而不是传递的参数值