• 《重构:改善既有代码的设计》读书笔记3 重新组织数据


    (1)self encapsulate field 自封装字段。

    不要直接访问字段,为这个字段建立取值/设置函数。 好处是:子类取值时可以通过覆盖而进行值校验。

    (2)replace data value with object  以对象取代数据值

    开发初期,往往以简单的数据项表示简单的数据。但随后会发现,比如phonenumber需要格式化,抽取区号之类的行为,如果数据项只有一两个,可以把相关函数放入所在对象里。

    (3) change value to reference 将值对象改为引用对象

    对象要区分值对象还是实体对象(引用对象),值对象的使用一般在每一次出现的地方都是新的实例,可以对比基本类型一样,每一个基本类型,都是在内存中唯一分配;实体对象,基本上多对一的时候都是只存在一个对象实例,这个没有什么异议;

      在对象创建工厂函数--存入map中,并提供访问对象的访问点 get--从map中获取

    (4) change reference to value

    值对象有一个非常重要的特性,它们应该是不可变的。保证这一点,就可以放心的用多个对象表示同一事物。  equals  hashCode方法

    (5)以对象取代数组  

    一个数组容纳了很多种不同的对象,这会给用户带来麻烦,他们那很难记住数组的第几个是什么。

    新建一个类表示数组的所有信息,在里面用字段表示一个数组,并通过set get 对数组的各个数据进行访问。

    (7) change unidrectional association to bidirectional 将单向关联改为双向关联    一个类的修改 引发另一个类的变化

    两个类对需要对方的特性,但其间只有一条单向链接。(order customer)

    Order Customer ----> setCustomer(Customer customer){this.customer=customer;customer.addOrders(this);}   一对多时    一(Order)控制关联关系。

    (8)将双向关联改为单向关联      除非现有Customer对象 否则不会存在Order对象  将Order到Customer的连接移除      将Customer对象作为参数传递给用户

    (9)以字面常量取代魔数。  魔数是指拥有特殊意义,却又不能明确表现出这种意义的数字。 一旦这些数发生改变,你需要在程序中找到所有的魔法数。

      static final double PI=3.14

    (10) Encapsulate Field  封装字段

      private String name;

      public String getName(){return name;}

      public String setName(String name){this.name=name;}

    (11)Encapsulate Collection 封装集合

      private Set cources;

      记得不要把set 赋值给cources,因为修改set后,cources也会改变,必须创建一个set副本  比如 cources.addAll(set)

    (12)Replace record with data class 以数据类取代记录

      1、新建一个类,表示这个结构

      2、对于记录中的每一项数据,在新建的类中建立一个对应的private字段,并提供相应的取值/设置函数

    (13)Replace type code with class 以类取代类型码   

    把数值换成一个类,编译器就可以对这个类进行检验。

      public static final int O=0;

      public static final int A=1;

      public static final int B=2;

    =>enum

  • 相关阅读:
    收藏好博客
    iOS设备的重力感应
    局域网内通过UDP协议进行传输接受数据——AsyncUdpSocket
    定时器NSTimer的用法
    线程数:5,ramp-up:1,循环::10 和 线程数:10,ramp-up:10,循环数:1,这两种情况有没有区别?
    什么是性能测试?
    JMeter 之 XPath提取器
    DNS--安装&&配置文件
    DNS--简介&&解析过程
    Tomcat--隐藏版本号
  • 原文地址:https://www.cnblogs.com/zdcsmart/p/12487701.html
Copyright © 2020-2023  润新知