[重构]Feature Envy
Feature Envy(依恋情结)
官方的:函数对某个类的兴趣高过对自己所处类的兴趣。
影响:数据和行为不在一处,修改不可控。
目标:将数据和操作数据的行为包装在一起。
Demo:媒婆、一小伙、一小姑娘
场景一:函数的全部数据都来自于另外一个类
媒婆、小伙先出场
public class WomanMatchMaker { ... public string MatchedPairResult() { //boy information var boyInfo = boy.GetInformation(); //girl information var girlInfo = girl.GetInformation(); return (RuleMatching(boyInfo, girlInfo) ? "To be together!" : "Improper!") + GetInformationComeFrom(); } private bool RuleMatching(string boyInfo, string girlInfo) { throw new NotImplementedException(); } ... }
经过一番重构之后,他们终于幸福的在一起了。
总结:
1、函数全部数据来自另外一个类
做法:将数据提炼到一个独立函数中 Move method。
2、函数部分数据来自另外一个类
做法:将“部分数据”提炼到一个函数中 Move method。
3、函数的数据来自不同类
做法:将数据分类,分别提炼各自的独立的函数,在将这些函数移到各自属于的类中。
PS:Refactoring书中提到过这种。如果一个函数使用多个类的数据,那么要判断哪个类拥有最多此函数使用的数据,这个函数应该被移到哪,这种场景是在是没想到过。如果这个函数用到多个类的数据。分别提炼函数,在移到相应的类中不就行了。个人认为,函数应该属于某个对象的职责,应该根据情况而定。
2012/8/19
- 2楼Wentasy昨天 19:00
- 重构——需要经验积累的学问。
- Re: wxr0323昨天 19:07
- 回复Wentasyn正在积累中,不清晰之处,还望指出。
- 1楼maco_wang昨天 18:02
- 好文,顶一下!
- Re: wxr0323昨天 18:03
- 回复maco_wangnFeedBack!FeedBack!:)