显示吸气剂

2024-01-25

我正在研究getters/setters,一般的想法是它们是邪恶的,应该避免。您应该让对象完成工作并产生结果。

阅读材料:

为什么 getter 和 setter 方法是邪恶的 https://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html

为什么要使用 getter 和 setter? https://stackoverflow.com/questions/1568091/why-use-getters-and-setters?rq=1

考虑到所有这些,假设我有一本书class看起来像这样:

publc final Book{

    private final String title;
    private final List<Authors> listofAuthors;
    private final int numberofpages;

    //constructor not included in example.

    //getters for title, listofAuthors, and numberofpages

    public int numberofpagesleft(int pagesRead){
        //code to determine number of pages left
    }

    public boolean isWrittenBy(Author author){
        //code to determine if book contains author
    }

}

如果我有一个UI(ex. JavaFX, webpage等..)并希望我的课程灵活,包括getters for title, listofAuthors and numberofpages用于显示目的encapsulation?

Example:

//library is an List<Book> collection, and author is an object of the Author class.
for (Book book : library){
    if(book.isWrittenBy(author){
      System.out.println("Books in your collection written by " + author.toString() + " include:" );
      System.out.println(book.getTitle());
    }
}

or

for (Book book : library){
    //returns a Collections.unmodifiableList().
    if(book.getAuthors(){
        //code to build a set of authors in my library
    }
}

问题:

  1. 正在呼叫getTitle() or getAuthors()在循环中断中encapsulation?

  2. 如果上述问题的答案是肯定的,那么我将如何展示这本书isWrittenBy()回报true?以及我如何收集图书馆中的所有作者?


有一种思想流派声称大量的 get/set 方法显示了粗心的面向对象设计。您询问如果您的Book对象没有合适的getXXX方法。答案大概是你告诉你的书展示自己:

MyUserInterface interface=...;
...
book.renderToUserInterface (interface);

我认为过度使用 get/set 方法的争论中再次存在一些力量——我认为良好的设计使编程类成为它们所代表的现实世界事物的良好模型,而现实世界的事物通常不仅仅是可以设置和查询的离散数据项的存储库。我认为我们确实倾向于将类(Java 和其他语言中的)视为只不过是经过修饰的数据结构,而且它们可以不止于此。

然而,在我看来,认为 get/set 方法是“邪恶”的想法太过分了。教条地避免这些方法不太可能有帮助,特别是当大多数 OO 程序中发生的许多事情实际上是支持围绕建模领域对象的类的基础结构时。此外,在考虑应用程序的完整 OO 模型时,“让对象完成工作”是最有意义的。在设计层面个人对象,例如在通用库中使用,我认为我们必须有点务实。

我似乎记得“让对象完成工作”是大约十年前的一个热门想法,但我不相信这已经是一件大事了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显示吸气剂 的相关文章

随机推荐

  • Node js Express 应用程序中使用 setTimeout 获取请求的并发性

    控制台日志图片 https i stack imgur com TKhfa png const express require express const app express const port 4444 app get async
  • 提高 Python 模块导入速度

    之前已经问过如何加速Python模块导入的问题 加速 python 导入 加载器 https stackoverflow com questions 2010255 speeding up the python import loader
  • 内存不足异常selenium服务器2.0b3

    我们刚刚部署了selenium服务器2 0b3 从1 0 3升级 它 看起来有一些相当严重的内存泄漏 OutOfMemory 运行时间超过 30 分钟时抛出异常 是否有任何直接的解决方法来处理内存泄漏 2 0b3 硒服务器 我希望获得 2
  • gun db 中公共空间、用户空间和冻结空间的简单示例

    枪看起来很棒 既有用又好用 然而 我很难理解之间的区别public空间放置 auser空间放置和frozen空间放置 https gun eco docs Introduction data 我尝试的最简单的例子是 公共场所 let gun
  • 如何将X11事件传递给QDialog

    目前 我正在尝试将系统 X11 事件 在 Linux 上 传递给我创建的对象 为此 我从 QApplication 中将 eventFilter 安装到了我的对象上 这是有效的 因为它获取应用程序的所有事件 但是我还需要传递对象 X11 事
  • bash 中的数组运算符

    有没有办法测试数组是否包含指定元素 例如 array one two three if one in array then fi 一个 for 循环就可以解决这个问题 array one two three for i in array d
  • NodeJS 和客户端与 Yeoman 和 Mocha 的全面集成测试

    我与 Yeoman 一起运行了很棒的客户端测试 Yeoman 编译我的 CoffeeScript 在服务器中打开测试页面 使用 PhantomJS 访问它 并将所有测试结果传递到命令行 这个过程非常hacky 测试结果通过alert 发送到
  • 用猫鼬增加价值?

    我有一个mongoose我的模型node js应用程序 代表发票 我已经弄清楚了大部分内容 但我确实需要确保我的发票被编号 递增 以便能够为我的客户提供正确的参考 使用 SQL 数据库 我会创建一个AUTO INCREMENT列保存这个值
  • Spark 组由于内存不足问题

    我正在一个相当小的数据集 HDFS 中的 80 个文件 总共很少 上执行一个简单的 groupBy 我在纱线集群中的 8 台低内存机器上运行 Spark 即 spark submit master yarn client num execu
  • Tkinter 文本小部件设置选项卡

    我必须将文本小部件的选项卡大小设置为 4 个字符 当我做textwidget config tabs 4c 8c 我没有得到所需的结果 它的制表符很多 现在是 4 个字符 我在设置选项卡属性时做错了什么吗 另外 当我显示行号和列号时 我通过
  • 如何在 Three.js 中隐藏和显示场景中的对象

    我的场景中有一个由球体组成的物体 我有一个隐藏和显示按钮 我的程序流程就是这样的 例如 当我选择其中一个球体 我使用光线投射来选择球体 时单击隐藏按钮 该球体将被隐藏 然后单击显示按钮 它将显示出来 但我不知道该怎么做 我使用 Three
  • 从 javaScript 函数中的 WebSQL 查询返回 COUNT

    我想返回数据库中特定表的行数WebSQL里面一个javascript功能 下面是我的代码 function getCustomerCount var count 0 db transaction function tx tx execute
  • Prettier + Airbnb 的 ESLint 配置

    最近 我开始使用 Visual Studio Code 作为我的编辑器 并发现了 Prettier JavaScript 格式化程序 我认为这是一个很棒的插件 因为它可以帮助我让我的代码看起来很漂亮 我设置了 Airbnb 的 ESLint
  • 如何使用 php 在 facebook 中保存用户的个人资料图片

    您好 我正在尝试创建在其中使用用户个人资料图片的应用程序 所以我编写了从 Facebook 读取个人资料图片并将其保存在我的服务器上的代码 我使用以下代码 function GetImageFromUrl link ch curl init
  • rolling.apply 应用于需要多列数据帧以减少单列的自定义函数

    我正在尝试为我的内容创建一个附加列df newc 通过滚动 申请df cond 具有自定义功能 自定义函数需要两列df 我不知道如何让它发挥作用 I tried df newc df cond rolling 4 apply T corre
  • 检查资源中是否存在 ID (R.id.something)

    因此 我有代码使用 AtomicInteger 为多个元素生成 ID 该 AtomicInteger 默认设置为 Integer MAX VALUE 并且随着分配 ID 的每个视图从那里递减 所以第一个带有生成 ID 的视图将是Intege
  • “django 视图中出现未知列‘user_id’错误

    我遇到一个错误 我不确定是什么原因造成的 这是错误 Exception Type OperationalError Exception Value 1054 Unknown column user id in field list 有谁知道
  • Spring Data Mongo @Column 等效注释(@Property?)

    是否有与 JPA Column 注释等效的 SpringData Mongo 基本上 我有一个 POJO 其中有一个属性 我想用不同的名称将其存储在 Mongo 中 因此 以下对象 public class Pojo Property ba
  • 使用 imagemagick montage 命令将平铺图像粘合在一起,无需调整大小

    这似乎是一个相当常见的问题 所以我将使用我能想到的尽可能多的关键字来问它 我有一堆 嗯 九个 平铺 jpeg 带有标准平铺文件名 每个 jpeg 均为 220x175 像素 top row tile 1 0 0 jpg tile 1 1 0
  • 显示吸气剂

    我正在研究getters setters 一般的想法是它们是邪恶的 应该避免 您应该让对象完成工作并产生结果 阅读材料 为什么 getter 和 setter 方法是邪恶的 https www javaworld com article 2