在构造函数中填充大量数据是不好的做法吗?

时间:2014-10-21 12:35:41

标签: java concurrency constructor hashmap

在构造函数中进行所有数据导入是不好的做法吗?或者静态工厂方法是否更适合创建对象,填充它,然后返回它?

我确实想要将所有数据准备好进行初始化,例如数据驱动的单例,例如在构建时从数据库中提取数据的扩展Hashmaps。我认为这种方法比延迟初始化更好,特别是在并发环境中。但我做错了吗?

class MyHashMap extends HashMap<MyKey, MyObject> 
{
    private MyHashMap() { 
         populateFromDb();
    }
}

2 个答案:

答案 0 :(得分:3)

如果所有内容都与所创建对象的状态相符,那么就没有什么&#34;错误&#34;那个。

但是,从架构的角度来看,您应该拥有所有业务代码运行的地方。这是您发布数据库连接并读取数据的地方。你甚至可以编写一个单独的类来执行人口任务。

原因:

在某种程度上,您可能希望通过其他方式替换人口机制。例如,在单元测试中,您可能希望使用一些硬编码的测试数据填充数据,因此您不需要数据库来进行单元测试。

答案 1 :(得分:0)

从理论上讲,拥有庞大的构造函数并没有错。但也许像工厂这样的创作设计模式会有所帮助。约书亚布洛赫(Joshua Bloch) - 在他的着作“有效Java”(Effective Java)中建议工厂而不是大型参数化构造函数的建造者和建造者构建器模式允许您逐步创建对象。您是否一次需要所有数据?