使用Holder类实现通用值对象

假设我们有一个简单的Holder类,它包装了T类型的值。我们可以这样定义它:

public class Holder<T> {
    public T value;

    public Holder(T value) {
        this.value = value;
    }
}

Holder<T>充当容器来保存和管理任何类型T的值。

假设有getSupplierByZipCode方法:

 public void getSupplierByZipCode(String zip, Boolean result) {
        if (zip.startsWith("9")) {
            result = true;
        } else {
            result = false;
        }
    }

调用这个方法:

   Boolean result = false;
    String zipCode = "98682";
    getSupplierByZipCode(zipCode, result);

由于 Java 的按值传递语义,我们传递给getSupplierByZipCode()的结果布尔值实际上并没有改变。

使用泛型值对象Holder<T>:

 Holder<Boolean> resultHolder = new Holder<>(false);
 String zipCode = "98682";
 getSupplierByZipCode(zipCode, resultHolder);

按照DDD值对象定义,getSupplierByZipCode方法中

 if (zip.startsWith("9")) {
            result = true;
        } else {
            result = false;
        }

这段代码应该纳入到Holder<T>中,这样把Holder<T>从通用意义转为领域意义的值对象,是一个与邮编ZIP相关业务逻辑的业务值对象。