Свойство или метод get с кэшированным результатом [closed]

Просто используйте «ax = fig.add_axes ([left, bottom, width, height])», если вы хотите точно контролировать макет фигуры. например

    left = 0.05
    bottom = 0.05
    width = 0.9
    height = 0.9
    ax = fig.add_axes([left, bottom, width, height])
1
задан The Cookies Dog 18 January 2019 в 11:05
поделиться

1 ответ

Я бы сделал это со свойством только для чтения и методом, который заполняет свойство.

Если вы знаете, что результат понадобится, вы можете загрузить его в начале - во время запуска службы, активации просмотра и т. Д.

Я в основном использую ReactiveUI в приложениях WPF, поэтому это будет выглядеть так:

// ViewModel constructor
GetResult = ReactiveCommand.CreateFromTask(async () => _model.GetResultAsync()); // notice that method is async
// there is also overload with CancelationToken

_result = GetResult.Retry(3).ToProperty(this, x => x.Result); // we can retry few times and we get change notification

GetResult.Subscribe(result =>{
 // do something as soon as the result is loaded
});   

GetResult.ThrownExceptions.Subscribe( errorHandler);

// ViewModel properties
private ObservableAsProperetyHelper<ResultType> _result;

public ResultType Result => _result.Value;

// view constructor

this.WhenActivated(d =>{ // d is CompositeDisposable for cleanup
  ViewModel.GetResult.Execute().Subscribe().DisposeWith(d); // cancel command if the view is deactivated before it's finished
});

Таким образом, вы можете сделать асинхронный вызов в нужный момент и сохранить результат на потом. Вы также можете легко обновить результат - он становится грязным, если использовать только ленивые свойства.

С другой стороны, вы можете легко создать спиннер для загрузки:

_isBusy = GetResult.IsExecuting.ToProperty(this, x => x.IsBusy);

Я следовал этому шаблону в постоянно включенной службе Windows, в которой пользовательский HTTP-сервер работал в фоновом режиме. Вы можете await GetResult.Execute(), если вы хотите навязать загрузку в определенный момент.

В моей практике этот паттерн демонстрирует очень мало недостатков - главный из них - шаблонный код, но при наличии надлежащих инструментов он может быть написан очень быстро.

Если вы создаете какое-либо приложение типа службы, консоль или что-то еще, шаблон MVVM по-прежнему очень полезен, вы просто не делаете представления.

0
ответ дан Krzysztof Skowronek 18 January 2019 в 11:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: