读书人

[复建]Feature Envy

发布时间: 2012-09-19 13:43:54 作者: rapoo

[重构]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!:)

读书人网 >其他相关

热点推荐