首页 技术 正文
技术 2022年11月21日
0 收藏 560 点赞 3,327 浏览 794 个字

坏味道——过大的类(Large Class)

特征

一个类含有过多字段、函数、代码行。

代码的坏味道(2)——过大的类(Large Class)

问题原因

类通常一开始很小,但是随着程序的增长而逐渐膨胀。

类似于过长函数,程序员通常觉得在一个现存类中添加新特性比创建一个新的类要容易。

解决方法

设计模式中有一条重要原则:职责单一原则。一个类应该只赋予它一个职责。如果它所承担的职责太多,就该考虑为它减减负。

代码的坏味道(2)——过大的类(Large Class)

  • 如果过大类中的部分行为可以提炼到一个独立的组件中,可以使用 提炼类(Extract Class)
  • 如果过大类中的部分行为可以用不同方式实现或使用于特殊场景,可以使用 提炼子类(Extract Subclass)
  • 如果有必要为客户端提供一组操作和行为,可以使用 提炼接口(Extract Interface)
  • 如果你的过大类是个GUI类,可能需要把数据和行为移到一个独立的领域对象去。你可能需要两边各保留一些重复数据,并保持两边同步。 复制被监视数据(Duplicate Observed Data) 可以告诉你怎么做。

收益

  • 重构过大的类可以使程序员不必记住一个类中大量的属性。
  • 在大多数情况下,分割过大的类可以避免代码和功能的重复。

代码的坏味道(2)——过大的类(Large Class)

重构方法说明

提炼类(Extract Class)

问题

某个类做了不止一件事。

代码的坏味道(2)——过大的类(Large Class)

解决

建立一个新类,将相关的字段和函数从旧类搬移到新类。

代码的坏味道(2)——过大的类(Large Class)

提炼子类(Extract Subclass)

问题

一个类中有些特性仅用于特定场景。

代码的坏味道(2)——过大的类(Large Class)

解决

创建一个子类,并将用于特殊场景的特性置入其中。

代码的坏味道(2)——过大的类(Large Class)

提炼接口(Extract Interface)

问题

多个客户端使用一个类部分相同的函数。另一个场景是两个类中的部分函数相同。

代码的坏味道(2)——过大的类(Large Class)

解决

移动相同的部分函数到接口中。

代码的坏味道(2)——过大的类(Large Class)

复制被监视数据(Duplicate Observed Data)

问题

如果存储在类中的数据是负责GUI的。

代码的坏味道(2)——过大的类(Large Class)

解决

一个比较好的方法是将负责GUI的数据放入一个独立的类,以确保GUI数据与域类之间的连接和同步。

代码的坏味道(2)——过大的类(Large Class)

引申阅读

欢迎继续阅读 代码的症与药 系列文章。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,999
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,357
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,140
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848