重构27-Remove God Classes(去掉神类)
2024-09-30 19:37:30
在传统的代码库中,我们常常会看到一些违反了SRP原则的类。这些类通常以Utils或Manager结尾,有时也没有这么明显的特征而仅仅是普通的包含多个功能的类。这种God类还有一个特征,使用语句或注释将代码分隔为多个不同角色的分组,而这些角色正是这一个类所扮演的。
久而久之,这些类成为了那些没有时间放置到恰当类中的方法的垃圾桶。这时的重构需要将方法分解成多个负责单一职责的类。
public class CustomerService {
public Double CalculateOrderDiscount(List<Product> products, Customer customer) {
// do work
}
public Boolean CustomerIsValid(Customer customer, Order order) {
// do work
}
public List<String> GatherOrderErrors(List<Product> products, Customer customer) {
// do work
}
public void Register(Customer customer) {
// do work
}
public void ForgotPassword(Customer customer) {
// do work
}
}
使用该重构是非常简单明了的,只需把相关方法提取出来并放置到负责相应职责的类中即可。这使得类的粒度更细、职责更分明、日后的维护更方便。上例的代码最终被分解为两个类:
public class CustomerOrderService {
public Double CalculateOrderDiscount(List<Product> products, Customer customer) {
// do work
}
public Boolean CustomerIsValid(Customer customer, Order order) {
// do work
}
public List<String> GatherOrderErrors(List<Product> products, Customer customer) {
// do work
}
}
public class CustomerRegistrationService {
public void Register(Customer customer) {
// do work
}
public void ForgotPassword(Customer customer) {
// do work
}
}
最新文章
- asp.net LINQ连接数据库SQL执行数据的增加、修改、删除、查询操作
- java反射案例
- Android开发学习笔记--给一个按钮定义事件
- 绿色通道(codevs 3342)
- servlet1
- SQL基础分类
- NSArray,NSSet,NSDictionary的遍历,基本使用集锦
- Android IOS WebRTC 音视频开发总结(十六)-- 音频设备操作之opensl与jni
- 正则转nfa:完成
- WCF之消息模式
- Remark of BLENDFUNCTION from MSDN
- 【转】Hibernate和ibatis的比较
- BZOJ3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者
- How many prime numbers(求素数个数)
- openwrt驱动与应用程序的联系
- XMPP系列(四)---发送和接收文字消息,获取历史消息功能
- vue组件,可以通过npm引用的组件
- vue 自学笔记(6) axios的使用
- java注解和反射学习
- unity3d Player Settings 中的Stripping Level(剥离等级)对应每个等级具体剥离了哪些库
热门文章
- Codechef Racing Horses题解
- Objective-C语言的 if ( self = [super init] )
- 万一的Delphi消息教程
- HDU1052Tian Ji -- The Horse Racing
- 关于Doctype、严格模式与混杂模式
- 【CEOI2002】【Poj 1038】Bugs Integrated, Inc.
- android判断正在使用的网络类型 0.不知道网络类型;1、2G;2、3G;3、4g;4、wifi
- 【146】ArcObjects类库索引
- java笔记线程电影院卖票最终版
- 一句powershell调用mimikatz抓密码