组织数据
这些重构技术有助于数据处理,用丰富的类功能替换原语。
另一个重要的结果是理清了类关联,这使得类更加可移植和可重用。
问题:直接访问类中的私有字段。
解决方案:为字段创建getter和setter,并仅使用它们访问字段。
问题:一个类(或一组类)包含一个数据字段。字段有自己的行为和相关数据。
解决方案:创建一个新类,将旧字段及其行为放在类中,并将类的对象存储在原始类中。
问题:因此,您需要用单个对象替换单个类的许多相同实例。
解决方案:将相同的对象转换为单个引用对象。
问题:您有一个引用对象,它太小且很少更改,因此无法管理它的生命周期。
解决方案:将其转换为值对象。
问题:您有一个包含各种类型数据的数组。
解决方案:用一个对象替换数组,每个元素都有单独的字段。
问题:域数据存储在负责GUI的类中吗?
解决方案:然后,最好将数据分离到单独的类中,以确保域类和GUI之间的连接和同步。
问题:您有两个类,每个类都需要使用另一个类的特性,但是它们之间的关联只是单向的。
解决方案:将缺失的关联添加到需要它的类中。
问题:类之间存在双向关联,但其中一个类不使用另一个类的特性。
解决方案:删除未使用的关联。
问题:您的代码使用了一个具有特定含义的数字。
解决方案:将此数字替换为具有人类可读的名称,解释该数字含义的常量。
问题:你有一个公共场地。
解决方案:将字段设为私有并为其创建访问方法。
问题:类包含一个集合字段和用于处理集合的简单getter和setter。
解决方案:将getter返回的值设置为只读,并创建用于添加/删除集合元素的方法。
问题:类有一个包含类型代码的字段。这种类型的值不用于运算符条件,也不影响程序的行为。
解决方案:创建一个新类,并使用它的对象而不是类型代码值。
问题:您拥有直接影响程序行为的编码类型(此字段的值触发条件中的各种代码)。
解决方案:为编码类型的每个值创建子类。然后从原始类中提取相关行为到这些子类中。用多态性替换控制流代码。
问题:你有一个影响行为的编码类型,但你不能使用子类来摆脱它。
解决方案:用状态对象替换类型代码。如果需要用类型代码替换字段值,则“插入”另一个状态对象。
问题:子类只在它们的(常量返回)方法上有所不同。
解决方案:用父类中的字段替换方法,并删除子类。