zoukankan      html  css  js  c++  java
  • 《重构》第八章阅读总结

    • 思维导图

    首先分为两部分,规范要求的以及需要根据场景权衡决策的。

    • 编码规范

    魔鬼数字需要用常量取代,对数据类应该尽量封装。这些是OO基础,无需多言。

    • 需要权衡

      1、使用值对象还是引用对象

    首先这里的值、引用对象,非语言上的值、引用对象,而是从可变、封装性来界定。不可变,完全封装称为值对象,引用对象就是成员可变,未完全封装。

    使用引用对象的场景:

    • 需要保证唯一性

        常见于对象被多个其它类持有,且有修改行为,需要保证唯一性,它们修改的都是同个对象,而不只是name字段都叫XXX的不同实例。这类实现通常用manager进行统一的对象管控。

    • 对象池

        为了避免重复创建实例造成GC压力,需要对对象进行复用。

        对象池的特点,大场景可以切割为多个等大小场景,一次创建,多次复用。但如果是多线程场景,设计较为复杂,就像单例一样,需要慎用。

    使用值对象的场景:

    • 只读不可变,建议实现时,字段用final前缀,封装完全。

       2、用对象替换数组(类封装)

         除非面向过程,否则没人会用一个孤立的数组。数组意味着背后的语境或Domain建模.对于OO编程来说,建议就是不要用孤立的数组,先封装。 

      3、复制被监视的数据(数据的单/双向)

        本质就是 数据的双工或者单工

        对应实现就是:观察者模式或者事件监听,两者都可以通过接口解耦

    •  观察者模式

        单工/双工,谁持有谁,还是都相互持有,均为observable实现类

        例,数据方向是A->B,那么B实现观察者,A持有B,A中数据发生变化,调用B的update接口,通知B。

        数据方向是A<->B,那么A、B均是观察者,AB相互持有,各自数据发生变化,调用对象update接口,通知对方

    • 监听事件模式

        单攻/双工,谁注册响应谁的事件,还是相互注册响应

        例子同观察者

      4、单双向引用

    • 单向变双向关联

        场景:使用很爽,维护很难。适合先构造好,后续只使用.

           如果要更新维护,需要确定负责刷新的控制端. 

             A、B均存在相互调用的场景,且A、B不好作为入参传入,需持有

    • 双向变单向关联

       场景:不需要A、B均存在相互调用的场景,A、B可以作为入参传入,不需持有。一般外面套个manger,持有A、B两者的集合的设计也可以。

      5、集合的封装性

        只读场景:集合只能读的场景

        可修改场景:封装集合的行为,只能通过接口的增删改来修改集合,封装对象给予的集合对象,均是clone副本.

        总结:

        这种在linq(java里的steam)场景下,常会见到,经过filter、sort等语句处理生成的集合都是新集合,对其的操作,均不会影响到原集合,保证了原集合的不可变性,如果要做彻底,集合的元对象,也应该做彻底封装,在clone时采用深clone

      6、类型码

        做枚举用:用枚举或静态类+静态实例对象表示

                  宿主类部分逻辑,需要依据该类型码做判定:

            宿主是有子类:组合方式,变化、差异的部分是什么,提成state、strategy接口,实现类承载,

            宿主是无子类:多态方式,变化、差异的部分是什么,父抽象,子实现

      7、字段取代子类

        差异、变化有限,且内部依赖该字段做的判定逻辑很少或没有(if else),一个或简单几个字段就可以表示,没有必要用多态。

  • 相关阅读:
    Ruby 2
    Ruby 1
    莱布尼兹:与牛顿争吵了一生的斗士 微积分的奠基人之一―莱布尼茨
    如何实现html页面自动刷新
    css z-index的层级关系
    让网页变灰的实现_网站蒙灰CSS样式总汇
    利用CSS变量实现炫酷的悬浮效果
    离线电商数仓(十四)之系统业务数据仓库数据采集(一)电商业务简介
    离线电商数仓(十三)之用户行为数据采集(十三)采集通道启动/停止脚本
    离线电商数仓(十)之用户行为数据采集(十)组件安装(六)采集日志Flume(二)消费Kafka数据Flume
  • 原文地址:https://www.cnblogs.com/suriyel/p/11489426.html
Copyright © 2011-2022 走看看