在静态java中用另一个相同类型的对象更新对象的最佳方法

时间:2015-02-06 18:20:59

标签: java rest

我在设计REST API时提出了这个问题。

要更新资源,客户端必须使用更新的字段提交整个资源。问题是并非所有字段都是可编辑的。如果客户端发送的资源包含他不应更新的更新字段,该怎么办?我应该抛出某种异常还是忽略它们并更新所有可编辑的字段? 我提出了以下解决方案

class User {

    private String firstName; //non-editable
    private String lastName; //non-editable
    private String occupation; //editable
    private String address; //editable

    //getters and setters

}

public void updateUser(User original, User update) {
    original.setAddress(update.getAddress());
    original.setOccupation(update.getOccupation());
}

我在这里看到的问题是updateUser方法与User类紧密耦合。如果我添加或删除可编辑/不可编辑的字段,我将始终必须更改方法。是否存在某种解决此类问题的最佳实践或模式。

2 个答案:

答案 0 :(得分:2)

User上的静态方法会正确封装此功能。这样,您就可以将所有特定于用户的代码保存在一起。

    class User {

      private String firstName; //non-editable
      private String lastName; //non-editable
      private String occupation; //editable
      private String address; //editable

      static public void updateUser(User original, User update) {
        original.setAddress(update.getAddress());
        original.setOccupation(update.getOccupation());
      }
    }

另外,如果您非常关心firstName / lastName在创建后没有被更改,我确保不会为它们添加setter。

答案 1 :(得分:1)

作为API的用户,我想知道我何时编辑不可编辑的值,因为这可能意味着我在代码中有错误或者我误解了我的功能API。在任何一种情况下,我都希望尽可能早地找到它,所以我更喜欢通过响应中的错误代码查看异常,而不是看起来对我来说是成功的但实际上并没有做我认为的事情。

那说,这取决于具体的用例。如果没有关于如何使用API​​的更多细节,很难说。仅更新可编辑字段可能更有意义,只需在API文档中明确说明即可。

由于coderkevin已经调出,在User类上使用静态方法将是放置实际执行更新的代码的合适位置。