>백엔드 개발 >C++ >ICommand 구현에서 사용자 지정 대리자를 사용하는 것이 반복되는 인스턴스화를 방지하는 최선의 방법입니까?

ICommand 구현에서 사용자 지정 대리자를 사용하는 것이 반복되는 인스턴스화를 방지하는 최선의 방법입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-20 17:21:11825검색

Is Using Custom Delegates in an ICommand Implementation the Best Approach for Avoiding Repeated Instantiation?

MVVM의 ICommand 구현: 반복 인스턴스화 방지

질문:

ICommand 인스턴스를 반복적으로 생성하지 않기 위해 사용자 지정 대리자를 사용하여 ICommand 클래스를 구현하려고 했습니다. 이 클래스에는 OnExecute(대리자 무효, 개체 매개 변수 허용) 및 OnCanExecute(부울 대리자, 개체 매개 변수 허용)이라는 두 개의 대리자가 포함되어 있습니다.

코드는 다음과 같습니다.

<code class="language-csharp">public class TestCommand : ICommand
{
    public delegate void ICommandOnExecute(object parameter);
    public delegate bool ICommandOnCanExecute(object parameter);

    private ICommandOnExecute _execute;
    private ICommandOnCanExecute _canExecute;

    public TestCommand(ICommandOnExecute onExecuteMethod, ICommandOnCanExecute onCanExecuteMethod)
    {
        _execute = onExecuteMethod;
        _canExecute = onCanExecuteMethod;
    }

    //...
}</code>

이 접근 방식은 효과가 있지만 구현의 타당성과 더 나은 방법이 있는지 의심스럽습니다.

해결책:

이 접근 방식은 일반적으로 사용되는 RelayCommand 패턴과 매우 유사하며, RelayCommand은 더욱 성숙하고 최적화된 솔루션입니다.

RelayCommand 구현:

<code class="language-csharp">public class RelayCommand : ICommand
{
    private readonly Predicate<object> _canExecute;
    private readonly Action<object> _execute;

    public RelayCommand(Predicate<object> canExecute, Action<object> execute)
    {
        _canExecute = canExecute;
        _execute = execute;
    }

    //...
}</code>

사용법:

<code class="language-csharp">public class MyViewModel
{
    private RelayCommand _doSomething;

    public ICommand DoSomethingCommand
    {
        get
        {
            return _doSomething ??= new RelayCommand(
                p => this.CanDoSomething(),
                p => this.DoSomeImportantMethod());
        }
    }
}</code>

Null 병합 할당(??=)을 사용하여 RelayCommand 인스턴스가 한 번만 생성되도록 합니다.

참고:

RelayCommand 또는 이와 유사한 사전 구축 구현을 사용하면 사용자 정의 대리자의 추가 복잡성을 피하고 더욱 깔끔하고 안정적인 코드를 얻을 수 있습니다.

위 내용은 ICommand 구현에서 사용자 지정 대리자를 사용하는 것이 반복되는 인스턴스화를 방지하는 최선의 방법입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.