【问题标题】:c# Builder Patternc# 生成器模式
【发布时间】:2016-06-27 13:44:00
【问题描述】:

我有一个为我的应用程序构建参考数据的类,你认为它是构建器模式的一个很好的实现吗?我可以改变什么来改进它?

public class ReferenceDataBuilder
    {
        private readonly List<Task> _builderTasks;
        private IDataProvider _dataAccess;
        private ReferenceData _referenceData;
        private bool _withPersistence;
        private string _persistenceDirectory;

        public ReferenceDataBuilder(IDataProvider dataAccess)
        {
            ValidationUtils.ArgumentNotNull(dataAccess, "dataAccess");

            _dataAccess = dataAccess;

            _referenceData = new ReferenceData();
            _builderTasks = new List<Task>();
            createBuilderTasks();
        }

        public virtual ReferenceData BuildAsync()
        {
            Parallel.ForEach(_builderTasks, (task) => { task.Start(); task.Wait(); });
            return _referenceData;
        }


        private void createBuilderTasks()
        {
            _builderTasks.Add(new Task(() => _referenceData.Object1 = _dataAccess.GetObject1()));
            _builderTasks.Add(new Task(() => _referenceData.Object2 = _dataAccess.GetObject2()));
            _builderTasks.Add(new Task(() => _referenceData.Object3 = _dataAccess.GetObject3());
            _builderTasks.Add(new Task(() => _referenceData.Object4 = _dataAccess.GetObject4());
        }
    }

用法:

new ReferenceDataBuilder(dataAccess).BuildAsync();

谢谢

【问题讨论】:

标签: c# design-patterns


【解决方案1】:

直接回答你的问题 - 我不是在评论它是否是好的代码,只是它是否是构建器模式的一个好的实现:

这根本不是建造者模式。构建器模式与具有复杂构造器的对象相关。它将类的构造与类本身分开。

在这种情况下,这是你的构造函数:

_referenceData = new ReferenceData()

您的代码正在执行的是检索数据并使用该数据填充此对象。看起来对象的构造非常简单。同样,我只关注你的确切问题,而不是看其他任何东西。它是构建器模式的良好实现吗?它似乎与构建器模式完全无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-07
    • 2019-05-03
    • 2011-01-15
    • 2011-06-22
    • 2010-09-28
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多