重构技巧 引入Null对象】的更多相关文章

描述:有两个类,学生类和导师类,学生的导师类可能不存在,因此在获取学生导师名字等信息时都要先判断导师名字是否为空.重构后通过一个空导师类来处理导师为空的相应逻辑. Before # introduce null object class Master: def __init__(self): pass def setValue(self, name, major, age): self.name = name self.major = major self.age = age def getNa…
[1]引入NULL对象范例 Book.h #ifndef _BOOK_H #define _BOOK_H #include <string> using namespace std; class INULLOperator { public: ; }; class Book : public INULLOperator { public: Book(); Book(int id, string name, double dprice); bool isNull(); string getNam…
当一个方法的参数超过3个以上,就可以考虑将参数封装成一个对象.将参数封装成对象后提高了代码的可读性,并且该参数对象也可以供多个方法调用,以后如果增加删除参数,方法本身不需要修改,只需要修改参数对象就可以.   重构前代码 public class Registration { public void Create(decimal amount, Student student, IEnumerable<Course> courses, decimal credits) { // do work…
常见重构技巧 - 去除不必要的!= 项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢?@pdai 常见重构技巧 - 去除不必要的!= 场景一:null无意义之常规判断空 场景二:null无意义之使用断言Assert 场景三:写util类是否都需要逐级判断空 场景四:让null变的有意义 场景五:Java8中使用Optional 场景一:null无意义之常规判断空 通常是这样的 private void xxxMethod(String key){ if(key!=n…
整理自 RefactoringGuru 代码异味 --什么?代码如何"闻味道"?? --它没有鼻子...但它肯定会发臭! 代码膨胀 [代码膨胀]是代码.方法和类,它们的规模已经增加到了难以处理的地步.通常,这些异味不会立即出现,而是随着程序的演化而积累(尤其是当没有人努力根除它们的时候). 过长方法 方法包含的代码行太多.一般来说,任何超过十行的方法都会让你产生疑问. 过大的类 一个类包含许多字段/方法/代码行. 基本类型偏执 在简单任务中使用基本类型而不是小对象(例如货币.范围.电话…
常见重构技巧 - 去除多余的if else 最为常见的是代码中使用很多的if/else,或者switch/case:如何重构呢?方法特别多,本文带你学习其中的技巧. 常见重构技巧 - 去除多余的if else 出现if/else和switch/case的场景 重构思路 方式一 - 工厂类 方式二 - 枚举 方法三 - 命令模式 方法四 - 规则引擎 方法五 - 策略模式 一些反思 参考文章 出现if/else和switch/case的场景 通常业务代码会包含这样的逻辑:每种条件下会有不同的处理逻…
IntelliJ IDEA 复杂的重构技巧(二) 转载 上次我说了一些 "复杂的重构技巧" ,讲的是一些使用 IntelliJ 的简单功能实现复杂的重构需求的技巧. 看到大家的反响之后我就感觉那个可能不大亲民,因为很多人连 inline 这功能都不知道(那岂不是把 IntelliJ 用成了记事本), 于是我决定再写一篇讲讲 IntelliJ 已经提供好了的一些复杂的重构功能. 这就不再是需要自己进行奇奇怪怪的操作的教程了,就会亲民得多. 从方法中提取方法 这是用来快速复用一段代码的功能…
前言 最近在读<Thinking in Java>,看到这样一段话: Primitives that are fields in a class are automatically initialized to zero, as noted in the Everything Is an Object chapter. But the object references are initialized to null, and if you try to call methods for an…
Null Object Pattern http://groovy-lang.org/design-patterns.html#_loan_my_resource_pattern 对于一些场景获得的对象为 null, 然后我们的使用的场景, 对null对象调用正常对象的方法, 导致报错. 因为null对象,没有对应的方法. The Null Object Pattern involves using a special object place-marker object representin…
本文均为项目实战经验,要求兼容至IE8,所以以下内容均为兼容代码,欢迎各位小伙伴批评指教.其实重构页面是一门学问,看似简单,却暗藏很多学问.实际项目中页面的重构有以下几点最基本需求: 1.需要使用合理的标签进行语义化: 2.可扩展性,在页面的某个标签内增加新的内容(文字或标签),不会对原有内容造成影响. 3.当页面接受后台数据时,标签内容替换后,页面布局与样式不会受到影响. 4.兼容性(根据项目需要) 页面重构基本思想: 1.渐进增强思想(以兼容要求的最低版本为基础,主键向高层次的浏览器靠拢):…