通用DAO和业务对象类型 - 减少代码的方法

时间:2016-01-08 19:45:07

标签: java dao

我在下面的代码中写了以下GenericDAO

abstract public class DAO <T extends AbstractBusinessObject> {

// CRUD: create, read, update, delete 

public abstract T create(Class<T> abObj);

public abstract T read();

public abstract void update(T abObj);

public abstract void delete(T abObj);

但偶尔当我实现自定义DAO(例如DAOinMemory)及其类似create的方法时,我必须 写下面的代码:

 public T create(Class<T> abstractObjectType) {

    IDGenerator IDGenerator = IDGenerator.getInstance();

    if (BusinessEntityFirst.class.isAssignableFrom(abstractObjectType)) {
        BigInteger id = IDGenerator.getID();
        BusinessEntityFirst bef = new BusinessEntityFirst(id);
        return (T) bef;
    }

    if (BusinessEntitySecond.class.isAssignableFrom(abstractObjectType)) {
        BigInteger id = IDGenerator.getID();
        BusinessEntitySecond bes = new BusinessEntitySecond(id);
        return (T) bes;
    }

    if (BusinessEntityThird.class.isAssignableFrom(abstractObjectType)) {
        BigInteger id = IDGenerator.getID();
        BusinessEntityThird bet = new BusinessEntityThird(id);
        return (T) bet;
    }

    if (abstractObjectType == null) {
        throw new NullPointerException("Can't create instance for:" + abstractObjectType);
    }
    return null;
}

我看到create - 方法实现的某些部分看起来像 Spaghetti代码(使用.isAssignableFrom方法的三个if条件)并且我无法做任何事情战胜它。你可以建议如何为这些部分制作一个共同的代码片段以摆脱Spaghetti代码吗?

1 个答案:

答案 0 :(得分:0)

您可以查看Factory Design PatternAbstract Factory Design Pattern,这可以帮助您设计代码。在您的情况下,抽象工厂模式将是一个更好的设计选择。

工厂设计模式根据需要处理对象的创建。因此,在您的情况下,您将拥有一个对象生成器类,它将从工厂生成所需的对象。