Rumah > pembangunan bahagian belakang > C++ > Adakah Menggunakan Perwakilan Tersuai dalam Pelaksanaan ICommand adalah Pendekatan Terbaik untuk Mengelakkan Instantisi Berulang?

Adakah Menggunakan Perwakilan Tersuai dalam Pelaksanaan ICommand adalah Pendekatan Terbaik untuk Mengelakkan Instantisi Berulang?

Barbara Streisand
Lepaskan: 2025-01-20 17:21:11
asal
825 orang telah melayarinya

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

Pelaksanaan ICommand dalam MVVM: elakkan instantiasi berulang

Soalan:

Untuk mengelakkan berulang kali membuat kejadian ICommand, saya cuba melaksanakan kelas ICommand menggunakan perwakilan tersuai. Kelas ini mengandungi dua perwakilan: OnExecute (pewakilan batal, terima parameter objek) dan OnCanExecute (wakilkan bool, terima parameter objek).

Kod adalah seperti berikut:

<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>
Salin selepas log masuk

Pendekatan ini berkesan, tetapi saya ragu-ragu tentang kewajaran pelaksanaannya dan sama ada terdapat cara yang lebih baik.

Penyelesaian:

Pendekatan ini hampir sama dengan corak RelayCommand yang biasa digunakan, RelayCommand ialah penyelesaian yang lebih matang dan dioptimumkan.

Pelaksanaan 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>
Salin selepas log masuk

Penggunaan:

<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>
Salin selepas log masuk

Gunakan penugasan null-coalescing (??=) untuk memastikan bahawa RelayCommand tika hanya dibuat sekali.

Rujukan:

Dengan menggunakan RelayCommand atau pelaksanaan pra-bina yang serupa, anda boleh mengelakkan kerumitan tambahan perwakilan tersuai dan mendapatkan kod yang lebih bersih dan boleh dipercayai.

Atas ialah kandungan terperinci Adakah Menggunakan Perwakilan Tersuai dalam Pelaksanaan ICommand adalah Pendekatan Terbaik untuk Mengelakkan Instantisi Berulang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan