gpt4 book ai didi

java - Façade - 接受对象实例,还是单独的参数?

转载 作者:行者123 更新时间:2023-12-02 08:37:28 27 4
gpt4 key购买 nike

我正在创建一个无状态 session bean(外观),它将用于“管理”特定实体,我们将其称为产品。将有添加新产品、更新现有产品、获取产品等的方法(我使用 Hibernate 进行持久化,因此我有一个“ProductDbManager”bean,外观将用于数据库访问)。

此 Bean 将作为 Web 服务公开,以便可以从 Web 界面和简单的桌面应用程序调用它。

我的问题是,对于诸如 AddProduct 之类的方法来说,接受 Product 实例或诸如“Name”、“Description”、“Price”等单个参数是否是最佳实践?等等?

最初创建的产品可能仅包含“名称”,或者可能包含“名称”和“描述”,或者设置了所有属性,等等。从这个角度来看,接受 Product 实例会更简单(就创建外观而言),以便客户端可以简单地创建一个新的 Product,设置可用的属性,然后将其传入。

使用替代选项时,我需要创建相当多的 AddProduct 重载才能接受不同的参数。然而,为了尽可能灵活并使立面用户的生活更轻松,这是否更好?这两个选项都应该可用吗?

最佳答案

我更喜欢 Web 服务方法来接收表示相关数据项的对象。

有时对于不平凡的方法,甚至有:

DoActionResponse doAction(DoActionRequest request);

作为我的网络服务方法。然后,Web 服务实现将执行输入验证(与 servlet 在将表单输入传递到代码核心之前验证表单输入的方式相同)以及将必要的数据映射到核心代码所需的数据。为什么要进行数据映射?我发现,拥有一个与内部核心系统数据模型分离的 Web 服务数据模型可以让我根据需要更新内部模型,而无需更改外部模型,从而影响客户端。

为了你的,我愿意

boolean addProduct(Product toAdd);

万一您向“产品”添加更多字段,则无需更改 Web 服务接口(interface),这最终将导致 5 个人不得不在三年后更改其代码,因为他们的系统依赖于您的系统网络服务。

我还会考虑一些身份验证,以便只有管理员用户才能操作数据库。 SOAP 有这方面的东西,或者你也可以:

boolean addProduct(Product toAdd, Authentication auth);

AuthToken login(String username, String password);
boolean addProduct(Product toAdd, AuthToken token); // token is a string really. like a session id

但是如果向客户端返回错误,而不仅仅是 true/false 呢?当然,有 SOAPFault,但它的级别相当低。这就是为什么我有时会使用响应对象,其中对象中的字段之一是错误对象数组(错误代码、错误消息等)。

关于java - Façade - 接受对象实例,还是单独的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com