实践中的重构14_用方法设计保证正确性
一般来说,方法的调用方遵循方法的契约调用某方法来完成某功能。每个方法的功能应该是相互独立而语义清晰的。好的代码必然是清晰的,但是清晰的代码未必是好的。
方法存在的目的是被调用方调用,因此,从调用方的角度来看,清晰的方法一样会存在一些潜在的问题。
下面的代码中,Helper提供了2个方法,一个用来转换对象,一个对来验证对象。看上去很清晰很好。
class Helper {public DomainObject convertAndValidate(ValueObject valueObject) {DomainObject domainObject = convertValueObject2DomainObject(valueObject);domainObject.setValid(validate(domainObject));return domainObject;}private DomainObject convertValueObject2DomainObject(ValueObject valueObject) {// convert...return null;}private boolean validate(DomainObject domainObject) {// validatereturn false;}}class A {public void method() {// get value object from somewhere.ValueObject valueObject = null;DomainObject domainObject = new Helper().convertAndValidate(valueObject);boolean isValid = domainObject.isValid();// ...}}class B {public void method() {// get value object from somewhere.ValueObject valueObject = null;DomainObject domainObject = new Helper().convertAndValidate(valueObject);boolean isValid = domainObject.isValid();// ...}}class C {public void method() {// get value object from somewhere.ValueObject valueObject = null;DomainObject domainObject = new Helper().convertAndValidate(valueObject);boolean isValid = domainObject.isValid();// ...}}