【问题标题】:Storing properties on relational database without using getters在不使用 getter 的情况下在关系数据库上存储属性
【发布时间】:2015-11-11 03:15:24
【问题描述】:

我最近读到关于在 Java 中不使用 getter 和 setter(例如 When are getters and setters justified)。

我不知道这是否真的是进行面向对象编程的最佳方式。无论如何,假设我在代码中不使用 getter,我如何将数据存储在关系数据库中?当我两年前开始使用 Java 时,我曾经做过类似以下的事情:

public void createTitle(Title title) {

    // ... some code here ...

    String sql = "INSERT INTO titles (title_id, name) "
            + "VALUES (TITLES_SEQ.NEXTVAL,?)";
    preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setString(1, title.getName()); // Here is the getter
    preparedStatement.executeUpdate();

    // ... other code here ...
}

如果我没有title.getName() getter,如何将title 及其属性(在本例中为name)保存在我的关系数据库中?这只是一个例子,但我希望它有意义。

一些相关讨论:

【问题讨论】:

    标签: java oop relational-database


    【解决方案1】:

    我不知道为什么...但是您必须如何公开 title 的属性名称并通过点符号 e.G title.name 访问它

    【讨论】:

    • 从我所读到的关于 OO 和封装的内容来看,非常不鼓励使用公共字段。实际上,它通常被称为“邪恶”的做法。
    【解决方案2】:

    为避免使用 getter/setter,只需将变量公开(或受保护,视情况而定),点访问器就可以在它们的位置工作。

    title.name 而不是title.getName()

    硬币有两面:

    一个说公共字段不好并且暴露太多,另一个说简单的对象应该保持简单并且不需要getter/setter来完成同样的事情。

    如果您强烈需要禁止设置变量(只读),那么将其私有化并制作 getter 是可行的方法。 只写变量也有类似的过程,但只有 setter 而没有 getter。

    根据我的个人经验,如果我可以公开变量而不向最终用户公开危险的副作用,那么我会继续公开该字段。否则我尽可能关闭该字段的访问权限。

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 2013-07-11
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      相关资源
      最近更新 更多