代码之家  ›  专栏  ›  技术社区  ›  William

fa_ade-接受对象实例或单个参数?

  •  0
  • William  · 技术社区  · 16 年前

    我正在创建一个无状态会话bean(fa_§ade),它将用于“管理”特定实体,我们称之为 产品 . 有一些方法可以添加新产品、更新现有产品、获取产品等(我使用Hibernate进行持久化,所以我有一个“ProductDBManager”be an,fa_§ade将用于DB访问)。

    这个bean将作为一个Web服务公开,因此可以从Web界面和一个简单的桌面应用程序调用它。

    我的问题是,这是否是最佳实践方法,如 附加产品 接受一个产品实例,还是接受诸如“名称”、“描述”、“价格”等单个参数?

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

    使用替代选项,我需要创建相当多的 附加产品 以接受不同的参数。但是,为了尽可能灵活,让fa_ade用户的生活更轻松,这是否更可取?这两个选项是否都可用?

    2 回复  |  直到 16 年前
        1
  •  1
  •   JeeBee    16 年前

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

    有时,对于非琐碎的方法,达到具有:

    DoActionResponse doAction(DoActionRequest request);
    

    作为我的Web服务方法。然后,Web服务实现将进行输入验证(与servlet在将表单输入传递到代码核心之前验证表单输入的方式相同),并对核心代码所期望的内容进行必要的数据映射。为什么要进行数据映射?我发现,有一个独立于我的内部核心系统数据模型的Web服务数据模型,允许我根据需要更新我的内部模型,而不改变外部模型,从而影响客户机。

    为了你,我会的

    boolean addProduct(Product toAdd);
    

    为了防止在产品中添加更多的字段,您不需要更改Web服务接口,这最终将导致五个人不得不在三年后更改其代码,因为他们的系统支持您的Web服务。

    我还将考虑一些身份验证,以便只有管理员用户才能操作数据库。肥皂是用来做这个的,或者你可以有:

    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
    

    但是,将错误返回给客户机,而不仅仅是对/错呢?当然,有soapfault,但它的级别很低。这就是为什么我有时会有响应对象,其中对象中的一个字段是错误对象的数组(错误代码、错误消息等)。

        2
  •  1
  •   Bombe    16 年前

    我宁愿加一个 Product 直接实例。如果您担心客户端代码创建 产品 实例,您可以提供 ProductFactory 然后可以使用所有这些重载方法只设置 产品 .