首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

能够像这里这样访问对象的字段的“坏”或“问题”是什么

这里描述的是对象字段的访问方式中可能存在的一些问题或不良实践。具体问题包括:

  1. 封装性问题:直接访问对象的字段可能违反了封装性原则,破坏了对象的封装性和数据隐藏。对象的字段应该通过公共方法(getter和setter)来进行访问和修改,以保证对象的封装性和数据的一致性。
  2. 安全性问题:直接访问对象的字段可能导致安全漏洞。敏感数据或关键状态的字段应该进行适当的访问控制和权限验证,通过公共方法来进行访问可以更好地控制和保护数据的安全性。
  3. 可维护性问题:直接访问对象的字段可能导致代码的耦合性增加,降低了代码的可维护性。当对象的字段发生变化时,需要修改所有直接访问该字段的代码,而通过公共方法来进行访问可以减少对代码的影响范围,提高代码的可维护性。
  4. 扩展性问题:直接访问对象的字段可能限制了对象的扩展性。如果后续需要对字段进行额外的处理或添加一些逻辑,直接访问字段的方式将无法满足需求,而通过公共方法可以在不改变现有接口的情况下进行扩展。

综上所述,直接访问对象的字段存在封装性、安全性、可维护性和扩展性等问题。为了解决这些问题,应该通过公共方法来访问对象的字段,以提高代码的质量和可维护性。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云对象存储(COS):提供安全、稳定、低成本的云端存储服务,适用于各种场景的数据存储和访问需求。详情请参考:https://cloud.tencent.com/product/cos
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

火车残骸和基本类型偏执问题解决方案

Martin Fowler 在《重构》中给这种味道起名字叫过长消息链(Message Chains),而有人则给它起了一个更为夸张名字:火车残骸(Train Wreck),形容这样代码火车残骸一般...有人编写一个新类: 第一步是写出这类要用字段 然后给这些字段生成各种 getXXX 很多语言框架提供约定就是基于这种 getter,就像 Java 里 JavaBean,相应配套工具lombok...,这样价格校验就应该是使用地方到处写。...但 Books 问题相对容易规避,因为产生了一个新模型,有通用设计原则帮助我们判断这个模型构建得是否恰当,而价格问题却不容易规避,因为这里没有产生新模型,也就不容易发现问题。...JavaBean,用MyBatis GenaraterLombok生成都会有Setter方法,这样DB查询接受参数时,数据自动映射到这个对象。如果不用setter,怎么赋值?

36520

由学习《软件设计重构》所想到代码review(一)

有人说可以用代码review工具啊,但是市面上这些代码review工具,只能帮助我们解决表面的bug和规范点,还无法帮助我们发现更深层次设计问题。...一、技术债务 何为技术债务 技术债务是有意无意做出错误非最优设计决策所引发俩务 我们在代码review时候,经常碰到一些实现有瑕疵方案,然后对方说因为时间太紧急临时采用方案,等第二期项目将其完善...可扩展性 支持新功能,不会导致连锁反应 可重用性 可以在代码其他地方引用其一块代码 可测试性 项目要能够支持单元测试 可靠性 在正确实现了功能同时,也能够考虑各种异常情况如何容错 2.1、...设计分类 Paste_Image.png 2.1.1 抽象型味道 Paste_Image.png 1、缺失抽象 举例说明: 问题点: 在JDK1.0中方法printStackTrace()以字符串方式将栈跟踪打印到标准错误流...那么接口这样定义常量有哪些问题呢? A、派生类被无关常量影响。 B、这些常量属于实现细节,通过接口暴露它们违反封装原则。 C、接口中存储常量,修改它们会影响其他使用者。

34130
  • 外甥女问我什么是代码洁癖,我是这么回答...

    即在两个模块中,都看到了和另一个模块相关程序结构相同意图方法。...混乱代码层次调用 我们一般系统都会根据业务 service、中转控制 controller 和数据库访问 dao 等进行分层。...5)味道带来问题 妍妍:舅舅,这些味道都需要解决吗,你说这些味道代码会带来什么样影响呢? ❤:是的,代码里如果味道代码太多,会带来四个 “难以”。...命名杂乱,结构混乱,在测试时可能测出新问题。 3. 重构技巧 露露:哦,原来是这样啊,那我们可以去除它们吗? ❤:当然可以了!...搬家:把函数字段移到更合适地方,让代码更井然有序。 抽象通用类:把通用功能抽出来,变成一个类,增加代码可重用性。 引入参数对象:当变量过多时,传入对象,消除数据泥团。

    17120

    AI 再造搜索3招:谷歌如何用机器学习和深度学习直接给你答案

    ,谷歌搜索引擎会知道这里 Totem 是指太阳马戏团演出,回答你它持续两个半小时,包括 30 分钟休息时间。 谷歌搜索 App 能做到这样回答问题是利用了深度神经网络。...深度神经网络是一种模式识别系统,能够通过分析大量数据学习执行特定任务。在谷歌搜索 App 例子中,深度神经网络学会了从互联网上相关网页中获取长句子段落,然后从中提取出有关问题答案信息。...你或许已经猜到,这些正确设定是什么完全取决于该设定所处于垂直领域是什么。例如,在医疗产业中,谷歌知道 WebMD.com 这样网站声誉良好,并会把这样网站放在其搜索索引顶部位置。...对于 Wikipedia 这样著名网站来说,谷歌可能完全不采取任何分类过程,这也是为了确保深度学习过程不会打扰用户既有的搜索体验(因为维基这样大网站不太可能产生网页)。...为了训练这样的人工智能系统,需要大量、由专业人士筛选过数据。这些数据不容易得到,也不便宜,而且对这种数据需求不会很快消失。

    76740

    关于Java持久化相关资源汇集:Java Persistence API

    常见问题解答   几个星期以前,我以“JPA:好与”为主题主办了一次 网上技术交流会。它受到了广泛关注,因此,我没有足够时间在这个时间空档结束时解答所有问题这里只列出了对其中部分问题答复。...此处增加最重要内容是一些基本缓存控制API,如回收某些对象ID,将一些经常访问ID固定到缓存中。 问题:既然实体管理器承担了所有繁重工作负载,那么会话bean还有什么价值?...当然,您还可以直接从servletJSP其他任何可以使用Java 5地方使用JPA。但是这样的话,您就必须管理自己事务、处理自己集群服务故障转移、管理自己服务重部署等。...我希望将来JPA规范版本提供一种方式,用于将命名查询限制到一个类对象中,到那个时候,就可以认为能够在任何位置定义命名查询。...问题:关于JPA推荐教程是什么? 回答:Kodo文档 中提供了许多JPA教程。 问题:是否存在任何方式,用于跨所有实体表配置表前缀?

    2.5K30

    什么代码会遭人耻笑,什么妹子会受人喜欢?从妹子角度戏说代码优劣。

    在日常生活中,丑姑娘和好姑娘一眼就能识别;在代码中,好代码与代码却不容易觉察,这里面有标准,但每个程序员都觉得自己创造代码好。了解这些标准,可以有效避免写出代码。...举个对比例子,就像冬天里美女冷了,要加衣服,里面穿了毛衣了,此时不要在那个毛衣上打主意,往上绑毛线打补丁都不可行,这样是美女也丑了;合理、简单路子就是在外面加件羽绒服。...在该示例中,差代码car对象中每个字段都有一个car前缀,本身对象名称就是car,再加一个car前缀就是画蛇添足。...,传递几个都可以,参数名字和意义也不知道;在好代码中,参数是一个对象,在形参列表中通过 ES6 析构语法,变成一个个名称和意义明确参数,可读性强;扩展性也强,在参数对象中增加新字段,不影响旧析构代码...代码破坏了扩展性开放-封闭原则,好代码就是要有所为,有所不为。 从副作用角度来讲...... ? 了解了概念,我们继续从副作用角度讲,具有良好复用性代码,没有副作用(副作用是幂等)。

    40130

    AI 再造搜索3招:谷歌如何用机器学习和深度学习直接给你答案

    ,谷歌搜索引擎会知道这里 Totem 是指太阳马戏团演出,回答你它持续两个半小时,包括 30 分钟休息时间。 谷歌搜索 App 能做到这样回答问题是利用了深度神经网络。...深度神经网络是一种模式识别系统,能够通过分析大量数据学习执行特定任务。在谷歌搜索 App 例子中,深度神经网络学会了从互联网上相关网页中获取长句子段落,然后从中提取出有关问题答案信息。...你或许已经猜到,这些正确设定是什么完全取决于该设定所处于垂直领域是什么。例如,在医疗产业中,谷歌知道 WebMD.com 这样网站声誉良好,并会把这样网站放在其搜索索引顶部位置。...对于 Wikipedia 这样著名网站来说,谷歌可能完全不采取任何分类过程,这也是为了确保深度学习过程不会打扰用户既有的搜索体验(因为维基这样大网站不太可能产生网页)。...为了训练这样的人工智能系统,需要大量、由专业人士筛选过数据。这些数据不容易得到,也不便宜,而且对这种数据需求不会很快消失。

    83450

    重构-改善既有代码设计:代码味道,编写代码20多宗罪(三)

    常常会有这样情况:你看到一段代码有着长长注释,然后发现,这些注释之所以存在是因为代码很糟糕。注释可以带我们找到代码中味道。找到味道后,我们首先应该以各种重构手法把味道去除。...在这里,"已有的对象"可能是函数所属类里1个字段,也可能是另一个参数。还可以运用 Preserve Whole Object (保持对象完整)将来自同一对象一堆数据收集起来,并以该对象替换它们。...主要问题变量命名错误或者使用魔数问题: 11、全局变量 全局数据是最刺鼻味道之一,幽灵一般,会带来很多诡异bug 主要问题是全局变量在多处地方可以写和读,导致不知道什么时候写,什么时候读...问题原因 当一个新创建类只包含几个公共字段(甚至可能几个getters / setters)是很正常。但是对象真正力量在于它们可以包含作用于数据行为类型操作。...解决方法 如果一个类有公共字段,你应该运用 封装字段(Encapsulated Field) 来隐藏字段直接访问方式。

    59820

    set 方法是味道?

    这里变化也变得可控。虽然审核状态这个字段还是会修改,但你所有的修改都要通过几个函数作为入口。有任何业务上调整,都会发生在类内部,只要保证接口行为不变,就不会影响到其它代码。...所有的字段只在构造函数中初始化 所有的方法都是纯函数 如果需要有改变,返回一个新对象,而不是修改已有字段 回过头来看我们之前改动“用构造函数消除 setter”代码,其实就是朝着这个方向在迈进。..., ...); } } 这里,我们创建出了一个“其它参数和原有 book 对象一模一样,只是审核状态变成了 APPROVED ”对象。...基于这样理解,连赋值本身其实都会被归入到味道提示,这才是真正挑战很多人编程习惯一点。...Martin Fowler 在《重构》中还提到一个与数据相关味道:全局数据(Global Data)。如果你能够理解可变数据是一种味道,全局数据也就很容易理解了,它们处理手法基本上是类似的。

    35940

    尝试Java,从入门到Kotlin(上)

    下面我总结一下我在趟过坑,以供转型学习同学参考。 本文并非要比出这些语言谁优谁劣。有时候,好是非常主观判断,不同人有着不同看法,强行断定好坏只会引起无畏争论。...这样调用方函数就能够明确地知晓应该处理或者传递哪些异常。这个特性在用得好的人手里,对正确处理各种边边角角异常十分有用。...Getter/Setter 在面向对象哲学中,字段属于实现细节,应该设为private使它隐藏在类内部。但是在实际中,有很多字段需要直接访问和修改。...因此,应该将字段访问封装方法中,即使只是很简单访问和设置,也应该实现getter方法和setter方法。...Java没有使用特性支持getter和setter方法,而是约定必须实现字段名前加getgetter方法(然而这里有个不一致地方,如果字段是布尔类型,则加is)和字段名前加setsetter方法。

    16030

    《重构》阅读笔记-代码味道

    减少字段和参数个数,当然可以去除一些味道,但更重要是:一旦拥有新对象,你就有机会寻找Feature Envy,这可以帮你指出能够移至新类中种种方法。...switch语句(Switch Statements) 从本质上讲,switch语句问题在于重复,面向对象多态特性可以优雅地解决这个问题。...令人迷惑暂时字段(Temporary Field) 有时你会看到这样现象:类内某个实例变量仅为某种特定情况而设。这样代码不易理解,因为通常认为对象在所有时候都需要它所有变量。...数据类(Data Class) 所谓Data Class,指的是:这种类拥有一些字段,以及用于访问(读、写)函数,除此之外啥都没有。...这样类只是一种不会说话数据容器,它们一定被其他类过分细碎得控制着。 Data Class就像小孩子,作为一个起点很好,但若要让它们成熟对象那样参与整个系统工作,它们就必须承担一定责任。

    60520

    如何解决代码腐败味道

    这里有一个例外:有时候你明显不希望造成“被调用对象”与“较大对象”间某种依赖关系。这时候将数据从对象拆解出来单独作为参数,也很合情合理。但是请权衡其所引发代价。 五....Switch Statements(Switch惊悚现身) 面向对象程序一个最明显特征就是:少用switch语句。从本质上说,switch语句问题在于重复。...Temporary Field(令人迷惑暂时字段) 有时你会看到这样对象:其内某个实例变量仅为某种特定情况而设。这样代码让人不宜理解,因为你通常认为对象在所有时候都需要它所有变量。...Data Class(幼稚数据类) 幼稚数据类是指:他们拥有一些字段,以及用于访问(读写)这些字段函数,除此之外一无长物。...Data Class(幼稚数据类)就像小孩子。作为一个起点很好,但若要让它们成熟对象那样参与整个系统工作,它们就必须承担一定责任。 二十一.

    85320

    重构-改善既有代码设计:重新组织数据16种方法(六)

    重新组织数据: 1.Self Encapsulate Field 自封装字段 间接访问属性:你直接访问一个字段,但与字段之间耦合关系逐渐变得笨拙。...如果这样数据项只有一两个,你还可以把相关函数放进数据项所属对象里;但是重复代码(Duplicated Code)味道和 依恋情结(Feature Envy)味道很快就会从代码中散发出来,当这些味道开始出现...有时候你会发现,一个数组容纳了多种不同对象,这会给用户带来麻烦,因为他们很难记住“数组第一个元素是人名”这样约定。...在以C为基础编程语言中,类型码枚举值很常见。如果带着一个有意义符号名,类型码可读性还不错。问题在于,符号名终究只是个别名,编译器看见、进行类型检验,还是背后那个数值。...但如果类型码会影响宿主类行为,那么最后办法就是借助多态来处理变化行为。 一般来说,这种情况标志就是switch这样条件表达式。

    60020

    带你如何进行微服务单元、集成和系统测试?

    3.代码味道” 如果一段代码是不稳定或有一些潜在问题,那么代码往往会包含一些明显痕迹,就好像食物要腐坏之前,经常会发出一些异味一样,这些痕迹就是代码“味道”。...例如,当运行单元测试时候,程序员可以通过stubmock来对DAO资源库接口进行替代,从而实现对服务层对象测试,这个过程中程序员无须访问持久层数据。这样就能减少对基础设施依赖。...在单元测试上下文中,一个mock对象是指这样一个对象——它能够用一些“虚构占位符”功能来“模拟”实现一些对象接口。...mock最大功能是把单元测试耦合分解开,如果编写代码对另一个类接口有依赖,它能够模拟这些依赖,并验证所调用依赖行为。 mock对象测试关键步骤如下。 使用一个接口来描述这个对象。...这里面有以下几个注意事项。 蓝绿两个部署环境是一致,并且两者应该是完全隔离(可以是不同主机不同容器)。

    1.1K40

    Java开发中PO、VO、DAO、BO、DTO、POJO 含义

    各层操作属于该层自己数据对象这样就可以降低各层之间耦合,便于以后系统维护和扩展。...J2EE开发人员使用数据访问对象(DAO)设计模式把底层数据访问逻辑和高层商务逻辑分开。实现DAO模式能够更加专注于编写数据访问代码。 DAO模式是标准J2EE设计模式之一。...但是界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时就可以用只有这10个属性DTO来传递结果到客户端,这样也不会暴露服务端表结构。...PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)数据结构形成一一对应映射关系,如果持久层是关系型数据库,那么,数据表中每个字段若干个)就对应PO一个(...还是要理性看待这个问题,要看项目“目的地”是什么

    72170

    一个完整TDD演练案例(三)

    讲义中给出代码问题则来自客户方受训学员,可谓“真实代码味道”。个人认为TDD不只是开发方法,还应该是设计方法,因此讲义中包含了诸多设计原理、思想和原则。...字段 学员在定义执行该任务类时,一种可能性是将输入答案作为类构造函数参数。...换言之,构造函数参数与对象之间关系是什么?之所以要作为构造函数参数,就是意味着在某种场景下这些参数值应该在创建该对象时就存在。这些参数值与对象“生死与共”,它们生命周期是保持一致。...显然这样接口违反了主-谓-宾语法。 问题:封装Answer与输入 既然已经封装了Answer对象,为何validate()方法还是要接收字符串类型输入?阅读需求,已可寻求到答案。...针对第三个任务,验证结果逻辑不应该由boolean型错误码来表现。

    89770

    《重构-代码整洁之道TypeScript版》第一天

    ,结合老袁十年经验总结到一块使用 TS 重写,希望能陪伴各位技术成长之路,我会从大致如下方向跟各位共同分享: 利用npm有效工具校验代码味道 使用Jest等前端测试工具构筑测试体系 使用TypeScript...:如果一个函数能够不需要任何参数能够解决你问题(包括使用其他函数,),这当然是绝佳。但是在我们日常开发中需要经常为函数添加参数。 动机?...(它是代码味道Data Clnmps,味道不是翻译尴尬是味道包含如下),后面也会给大家逐步介绍。...大量双向链接很用以造成某个对象已经死亡,但是依然存在堆区造成内存泄漏。此外双向连接之间有了依赖,如果这是两个独立文件没有经过webpack打包,比如运行在node中,这样就是跨文件依赖。...跨文件依赖就会造成耦合系统,使得任何一点点小改动都造成许多无法预知后果。所以只有真正需要双向关联时候,才去使用它。

    1.1K30

    高质量代码究竟依赖设计还是重构而来?

    第二个注释就是个糟糕注释,因为工程师在代码维护时不得不维护这个注释,如若更新了实现方式,则需要记得更改注释。同时,如果 100 行代码中有 50 行这样无效注释,那么反而增加阅读代码难度。...3.1 编程范式 编程范式指的是编程风格,与具体编程语言关系不大,比如 JavaScript 就是个多范式语言,即使 Java 这样一直被大家所熟知面向对象语言也加了不少函数式编程元素。...按照《架构整洁之道》划分,主流编程范式主要包括 3 种,结构化编程、面向对象编程和函数式编程。 3.1.1 结构化编程 不知道你是否想过这样一个问题?...4.3 重构 认识了代码味道,识别出了技术债,那下面就该还债了,这里还债方式就是重构。...下图中左边是充满味道代码,当你阅读这段代码时,首先是 getThem,你肯定很困惑,them 是什么?继续阅读,参数 list 又是什么?再看函数体,list1 是什么?item[0] 是什么

    24431

    高质量代码究竟依赖设计还是重构而来?

    第二个注释就是个糟糕注释,因为工程师在代码维护时不得不维护这个注释,如若更新了实现方式,则需要记得更改注释。同时,如果 100 行代码中有 50 行这样无效注释,那么反而增加阅读代码难度。...3.1 编程范式 编程范式指的是编程风格,与具体编程语言关系不大,比如 JavaScript 就是个多范式语言,即使 Java 这样一直被大家所熟知面向对象语言也加了不少函数式编程元素。...按照《架构整洁之道》划分,主流编程范式主要包括 3 种,结构化编程、面向对象编程和函数式编程。 3.1.1 结构化编程 不知道你是否想过这样一个问题?...4.3 重构 认识了代码味道,识别出了技术债,那下面就该还债了,这里还债方式就是重构。...下图中左边是充满味道代码,当你阅读这段代码时,首先是 getThem,你肯定很困惑,them 是什么?继续阅读,参数 list 又是什么?再看函数体,list1 是什么?item[0] 是什么

    20830

    代码之丑

    前言这是一篇极客时间《代码之丑》读书笔记,学习这课程时觉得里面很多点在现实中经常见到,便结合自己见到代码”整理出这样一篇文章,在这里也推荐购买极客时间《代码之丑》,个人觉得总结很好。...1.3 使用业务语言写代码void ApproveChapter(int chapter_id, std::string id)问题:id 是什么id?...2.3 错误拼写// 单词排序class QuerySort { SortFiled sortFiled;     ...}问题:排序字段,应该sortField。...优化:Book类使用approve()方法修改状态字段,而不是直接使用set去操作字段。建议:相比于读数据修改是一个更危险操作。缺乏封装再加上不可控变化,setter 几乎是排名第一味道。...十一、尾巴其实我在学习课程时发现很多问题都是分析工作流没有做好,这里推荐学习潘加宇《软件方法》,分析做好了很多“代码味道”自然而然也就没有了。

    66041
    领券