任务2:封装所有原生类型和字符串

做完if-else的清理后,代码应该稍微变得简单了一些,下一步要对付的是“封装所有的原生类型和字符串”一条。这其实也是一条《重构》一书中明文指出的坏味道:基本类型偏执。项目的初始,我们使用各种字符串、数字和布尔值来简单描述系统本无可厚非,但单纯的基本类型并不能完整表达数据的意图和可能的操作,编译器也无法帮助你写出语义正确的程序——一个 int 类型的hours参数,完全有可能被传递给一个只能处理minutes或者years的函数。随着系统演进,数据与操作数据的函数/方法会开始分散在各地,行为代码需要了解越来越多的数据假设和校验……系统的数据流和数据结构将很快变得难以维护。而要建立一个体面的对象体系,享受对象封装带来的好处:更内聚的单元,更可复用的模块,第一步总是先创建出这样的对象来。之后,才能逐步把更多的行为搬移到对象上。

你的任务

  1. 创建出“题目介绍”一节提及的其中 4 个对象:Job / Employer / JobSeeker / Resume

  2. 封装对象拥有的字段,不直接暴露public字段

  3. 消除代码中硬编码的若干字符串(错误信息除外):published / JReq / ATS

思考

  • 过程中有没有不顺畅的地方?

参考

  • 《重构 2》3.11 基本类型偏执(Primitive Obsession)

  • 《重构 2》7.3 以对象取代基本类型(Replace Primitive with Object)

  • 《重构 2》7.5 提炼类(Extract Class)

  • 《重构 2》11.3 移除标记参数(Remove Flag Argument)

Last updated