-1

我有一个类,其中的属性很少,出于某些原因,我必须在构造函数中初始化它们。我这样做了

public DataBuilder(IResources Resources)
        {
            _resources = Resources;
            // pre initializing data so request load faster after the first request
            var providerList = ProviderList;
            var publisherList = PublisherList;
            var applicationsList = ApplicationList;
            var catergoriesList = CategoryList;
            var editionsList = EditionsList;
        }

但是团队负责人告诉我要考虑如何在不将它们分配给变量的情况下初始化它们。

有任何想法吗 ?

4

1 回答 1

1

很高兴知道您在每个属性中都在做什么,因为如果没有该上下文,所有这些似乎都是代码异味。

如果属性 get 上的这个数据负载足够昂贵,足以保证在构造函数中“预先调用”它们,那么我要做的第一件事就是至少让它们成为方法:

InitializePropertyList();
// etc

我倾向于支持方法的原因是返回值可能会在后续调用中发生变化,或者调用很昂贵(在您的情况下就是这样) - 我希望属性调用很便宜。

至于他们在构造函数中,这对我来说立即像是一种代码味道。看来代码放错地方了。

为什么不在没有任何数据加载的情况下构造对象并公开预加载事物的方法?

class DataBuilder
{
    public DataBuilder(IResources resources)
    {
        _resources = resources;
    }

    public void PreLoadExpensiveData()
    {
        InitializeProviderList();
        // etc
    }

    private void InitializeProviderList()
    {
        // Put whatever was in get_ProviderList into here 
        // and make the property return just the field.
    }
}

我也倾向于期望对象构造很便宜。如果构造函数需要做很多事情,也许可以重构它,以便构造函数请求数据而不是自己获取数据。或者,在构造对象很快的地方使用我上面的结构,但是您公开了数据加载或初始化方法 - 假设这样的数据加载操作是对象的责任

于 2012-06-19T08:37:36.850 回答