重读《重构 2》- 以对象取代基本类型
7.3 以对象取代基本类型(Replace Primitive with Object)
一旦我发现对某个数据的操作不仅仅局限于打 印时,我就会为它创建一个新类。这些小 小的封装值开始可能价值甚微,但只要悉心照料, 它们很快便能成长为有用的工具。创建新类无须太 大的工作量,但我发现它们往往对代码库有深远的影响。
基本类型是语言抽象的最底层,业务领域的抽象是最高层;
为了让高层简单、稳定,需要抽象一套面向业务的对象,来做为业务描述的语言;
底层为高层的实现提供支持,一般在技术需求有变化时会进行变更,如性能需求发生较大改变。
另外,有一种“思维方式”大家要注意避免,常见的描述如:用 int 表示年龄,用 str 表示名字。
要逐步切换成:用 Age 表示年龄,用 Name 表示名字。
有些人会出现,“不直接对应到基本类型,就不会写代码”的情况,所以写出来的代码就如 7.3 中的例子那样,orders.filter(o => "high" === o.priority || "rush" === o.priority); 没有把细节封装起来,理解起来也困难。
理解困难就是个坏味道,会驱动着往简单发现发展,习惯用“简单的思维”思考后,就会先出现 7.3 例子中重构后的代码 orders.filter(o => o.priority.higherThan(xxx)),先在 higherThan 填充一个快速实现,如 return true; 让调用者代码能跑起来;然后再去实现函数细节。
以对象取代基本类型 大家可以把它当作这种思维方式的典型代表。
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/c36ef27820a81fdac389b0092】。文章转载请联系作者。
评论