中年|我们公司是如何把项目中的2100个if-else彻底干掉的?( 二 )
知道我们以后需要添加新的操作后 , 我们可以将If-Else重构为字典 。
本文插图
可读性已大大提高 , 并且可以更轻松地推断出该代码 。
注意 , 仅出于说明目的将字典放置在方法内部 。 您可能希望从其他地方提供它 。
5.扩展应用程序—完全避免使用If-Else
这是一个稍微高级的示例 。
通过用对象替换它们 , 知道何时甚至完全消除If 。
通常 , 您会发现自己不得不扩展应用程序的某些部分 。 作为初级开发人员 , 您可能会倾向于通过添加额外的If-Else(即else-if)语句来做到这一点 。
举这个说明性的例子 。 在这里 , 我们需要将Order实例显示为字符串 。 首先 , 我们只有两种字符串表示形式:JSON和纯文本 。 在此阶段使用If-Else并不是什么大问题 , 如果我们可以轻松替换其他 , 只要如前所述即可 。
本文插图
知道我们需要扩展应用程序的这一部分 , 这种方法绝对是不可接受的 。
上面的代码不仅违反了""打开/关闭""原则 , 而且阅读得不好 , 还会引起可维护性方面的麻烦 。
正确的方法是遵循SOLID原则的方法-我们通过实施动态类型发现过程(在本例中为策略模式)来做到这一点 。
重构这个混乱的过程的过程如下:
· 使用公共接口将每个分支提取到单独的策略类中
· 动态查找实现通用接口的所有类
· 根据输入决定执行哪种策略
替换上面示例的代码如下所示 。 是的 , 这是更多代码的方式 。 它要求您了解类型发现的工作原理 。 但是动态扩展应用程序是一个高级主题 。
我只显示将替换If-Else示例的确切部分 。 如果要查看所有涉及的对象 , 请查看此要点 。
本文插图
让我们快速浏览一下代码 。
方法签名保持不变 , 因为调用者不需要了解我们的重构 。
首先 , 获取实现通用接口IOrderOutputStrategy的程序集中的所有类型 。 然后 , 我们建立一个字典 , 格式化程序的displayName的名称为key , 类型为value 。
然后从字典中选择格式化程序类型 , 然后尝试实例化策略对象 。
最后 , 调用策略对象的ConvertOrderToString 。
简介:Nicklas Millard在丹麦的四大咨询公司之一中担任高级技术顾问 。 他主要担任客户项目的首席开发人员和解决方案架构师 。
他一直在为商业客户和政府机构开发软件 , 例如国防部 , 教育部 , 丹麦环境与食品部 , 国家警察 , 丹麦劳动力市场和招聘局以及?rstad 。
推荐阅读
- 中年|Carnot研发新型空气压缩机:噪音更低 寿命更长 成本更低
- 中年|中国-东盟区块链应用创新实验室揭牌
- 中年|交易所成黑钱胜地:“冻卡潮”背后的秘密
- 中年|波卡上线 现阶段是否值得投资?
- 人工智能|马斯克宣布,脑机接口公司将在下月重磅更新,赛博格将成为现实?
- 中年|首台国产T3.20悬臂式掘进机在中信重工下线
- 中年|探索城市的“未来模样”,腾讯政务接下来这么干
- 中年|明年起禁用不可降解塑料购物袋、吸管!塑料袋发明者本来是为拯救地球
- 北京|北京嘀嘀无限科技发展有限公司因涉嫌非法聘用外国人被行政处罚
- 携程|携程在天津成立融资担保新公司,注册资本3000万元