Правильное использование функции отложенной загрузки с использованием ленивого класса - PullRequest
1 голос
/ 20 мая 2019

У меня есть 1 длительный процесс, который имеет 2 шага, как показано ниже:

1) Преобразование (длительный процесс)

2) Управление версиями

Итак, если Шаг 1выполнено, шаг 2 выполнен.Теперь для выполнения 2-го шага я выполнил отложенную загрузку для контроля версий , как показано ниже:

public sealed class VariantProcessor
{
    private readonly Lazy<IEntityVersion> _entityVersion;
    private string _myAppConnectionString { get; set; }
    private readonly Action<Variant> _transform;

    public VariantProcessor(Func<IEntityVersion> entityVersion, string _myAppConnectionString, Action<Variant> transform)
    {
        _entityVersion = new Lazy<IEntityVersion>(entityVersion);
        _myAppConnectionString = _myAppConnectionString;
        _transform = transform;
    }

    public void Process(Variant model)
    {
        string variantVersion = string.empty;
        try
        {
            _transform(model);
            try
            {
                variantVersion = _entityVersion.Value.GetVersion();
            }
            catch (Exception) 
            {
                //rollback Transform operation
            }
        }
        catch (Exception) 
        {
        }
    }
}

public class AggregateCalculator : IVariantProcessor
{
    private string _myAppConnectionString { get; set; }  

    public void Process(Variant model)
    {
        _myAppConnectionString = ConfigurationManager.ConnectionStrings["dbConnectionString"].ConnectionString;
        new VariantProcessor(() => new EntityVersion(_myAppConnectionString), 
       _myAppConnectionString,Transform).
        Process(model);
    }

    private void Transform(Variant model)
    {
        //logic
    }
}

Вот как я вызываю создание версий с использованием lazyзагрузка как мне нужно выполнить после моего преобразования:

variantVersion = _entityVersion.Value.GetVersion();

Правильно ли я использовал отложенную загрузку или здесь не требуется?

Обновление: МысльПроцесс создания версий в виде отложенной загрузки состоит в том, чтобы избежать размещения своего объекта в памяти до тех пор, пока не начнется процесс преобразования. Я хотел, чтобы он был доступен только тогда, когда его запросили.

...