java - 如果仅由类本身访问,类方法/字段的封装是否重要?
问题描述
简短的上下文:我在java中做了一个俄罗斯方块克隆(所有游戏数据和方法都是一个类),我担心在这种情况下封装是否重要。
几乎所有的字段和方法都被标记为“默认”,没有任何 getter 和 setter,因为用户不应该访问它们。
方法直接操作变量而不传递任何参数,当然只有当它操作的东西是唯一的时(不能有两个当前片段,两个下一个块列表,两个持有片段等等)
如果用户永远不应该获得班级的原始成员,我真的需要 getter 和 setter 吗?方法只是直接获取和设置值。如果我有一个简单的 int 想要获取或设置,我只是直接做。
没有返回值,如果每次都应该发生一件事。例如:如果在生成过程中发生碰撞,gameOver() 会立即触发,而不是返回 false,然后在函数之外执行。我选择没有返回值,因为在函数内部执行它比用 if 语句围绕每个函数调用做同样的事情要简单得多。
我是否需要修复其中一些问题,我应该如何保持可读性和性能的稳定性?
解决方案
它不是。
为什么?理解是一个类的字段和方法正在朝着一个共同的目标协同工作。所以他们不是你必须保护自己免受伤害的敌人或粗心的演员。
只是为了防止外部参与者破坏类不变量,您尽可能隐藏您的字段和方法并仅公开必要的内容。
如果您必须使用 setter 和 getter 在类中的代码中强制执行纪律,那么您需要处理的问题比维护适当的封装(以及其他 OO 原则)要大得多。
推荐阅读
- python-3.x - 出现错误“无法导入 PIL.Image。使用 `array_to_img` 需要 PIL。”
- hashicorp-vault - Vault,如何强制在特定策略下创建令牌?
- reactjs - 在没有 Redux 的兄弟姐妹之间传递数据
- python-sphinx - :ref: 链接不给链接
- c# - EF Core SQLite TPH interitance 组合键-> 重复键?
- arangodb - 从 csv 更新 ArangoDB 集合
- python - Microsoft SQL Server 2017 和 conda 环境
- java - 使用火花流从kafka读取数据时出现lz4异常
- c# - 需要按相邻顺序重新排列像素集合
- java - PlayerView onTouch getY() 不是不断给出值