Una volta ho avviato un progetto MVVM / WPF, che alla fine è stato creato e distribuito, e per questo ho studiato molto il framework Caliburn.Micro MVVM Framework. Il fatto è: ho finito per non usare Caliburn.Micro per quello, e ho finito per implementare alcuni concetti MVVM (in particolare, solo le classi ViewModelBase
e RoutedCommand
).
Ora sono stato assegnato a un progetto un po 'più grande seguendo le stesse linee: "Applicazione desktop offline Rich Client per utente singolo", per così dire, e ho deciso di utilizzare Caliburn.Micro. Ed è qui che inizia il mio "problema".
Ho letto in questo famoso post sul blog , il cui titolo dice che "Se stai usando MVVM allora hai bisogno di un framework", che:
"Cercare di fare qualcosa come MVVM senza un framework è un'enorme quantità di lavoro. Tonnellate di codice duplicato, reinventare la ruota e riqualificare le persone a pensare in modo diverso .
Almeno con un framework eviti il codice duplicato e spero che non devi reinventare la ruota, permettendoti di concentrarti sulla riqualificazione delle persone. La parte di riqualificazione è generalmente inevitabile, ma un framework fornisce codice e struttura idraulica, rendendo più semplice il processo. "
Concordo sulla prima lettura, ma la mia esperienza reale con Caliburn.Micro (CM) nella mia attuale applicazione è stata di insicurezza e disorientamento. Cioè, il framework non ha affatto semplificato il processo, al contrario. Leggendo gli esempi sempre ripetuti forniti da Rob Eisenberg nella documentazione piuttosto (troppo) informale, e cercando di inferire i modelli di utilizzo dagli esempi forniti contorti, e le loro relazioni di classe e interfaccia totalmente indirette, in cui le cose sembrano progettate per funzionare in base a effetti collaterali, sembra umanamente impossibile a meno che tu non sia un genio esperto (scusami per l'ira, ma immagino che tu sappia cosa intendo).
Per non parlare del fatto che qualsiasi scenario sopra banale sembra coinvolgere i contenitori IoC, che è qualcosa con cui non ho mai lavorato e che sembra risolvere un problema che non potrei nemmeno avere . Non ho voglia di passare più ore di progetto a imparare queste cose invece di pensare al mio problema e ai domini dell'applicazione. Volevo solo una banana, ma CM mi ha regalato un gorilla (IoC) con in mano un cesto di banane.
Ora che sto pensando di tornare al mio framework MVVM homespun - composto solo da una manciata di classi specifiche MVVM che voglio implementare - vorrei almeno dare una possibilità a CM, nel caso in cui sto perdendo qualcosa qui, o semplicemente facendo le cose "nel modo sbagliato" per pura inesperienza e ignoranza. E quindi la domanda è:
Vi è un ampio consenso sul fatto che "i framework rendono le cose più semplici e naturali", ma se mi capita di sperimentare il contrario, significa che non dovrei usare il framework o che sto cercando di impararlo nel modo sbagliato? C'è un indizio che non dovrei nemmeno usare un framework in primo luogo? Oppure esiste un modo "giusto" per capire come utilizzare CM per un semplice sviluppo MVVM?
RelayCommand
un'implementazione (poiché "si lega" direttamente ai metodi per convenzione, invece che alle proprietà di ICommand).
RelayCommand
da un'altra libreria se quello usato da Caliburn Micro non funziona per te.
EventAggregator
per la messaggistica eNotificationObject
per ViewModelBase e MVVM LightRelayCommand
per i comandi. L'importante è identificare quali problemi il framework risolverà per te e utilizzare solo quelle soluzioni. Non pensare di essere costretto a utilizzare l'intera libreria di framework.