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>
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>
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>
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!