代码整洁之道--对象和数据结构体会

1.模块不应该了解它所操作对象的内部情形。对象隐藏数据,暴露操作,这意味对象不应该通过存取器暴露其内部结构

因为这样更像是暴露而非隐藏其内部结构。


对象应该暴露行为,而不是数据。

迪米特法则

类C的方法f只应该调用一下对象的方法

C

由f创建的对象

作为参数传递给f的对象

c的实体持有的对象

方法不应该调用任何函数返回对象的方法,不要和陌生人说话


final String outtputDir = ctxt.getOptions().getScratchDir().getAbsoluePath()

上面的代码,模块知道ctxt对象包含有多个选项,每个选项有一个临时目录,而每个临时目录有一个绝对路径。

对于一个函数,这些知识真够丰富的。调用函数懂得如何在一大推不同对象间浏览。

  这些代码是否违法迪米特法则,取决于ctxt,Options和ScrattchDIr是对象还是数据结构。如果是对象,则它们的

内部结构应该隐藏而不是暴露,而有关内部细节的知识就明显违反了。如果它们是数据结构结构,没有任何行为,

则它们自然会暴露其内结构,迪米特法则就不适用了。


隐藏结构

如果ctxt是对象,就应该要求它做点什么,不该要求它给出内部情形,那我们为何还要得到临时目录的绝对路径了?


ctxt应该隐藏其内部实行,观察模块其他代码,发现调用以上方法只是为了创建指定名称的临时变量

所以,直接要ctxt对象来做这件事情如何?

BuerdOutputStream bos  = ctxt.createScratchFileStream(classFileName)


重点:对象是封装的,对外提供方法,而不是数据。而数据结构就是暴露数据的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tof21

支持原创

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值